我有以下的代码:编译时代码生成
template<typename T, typename... args>
void func(const my_type<T, args...>& set, std::ofstream t_print, std::ofstream args_print) {
t_print << set.get_t() << std::endl;
if (sizeof...(args) > 0)
data << set.get_args() << std::endl;
}
}
的if
条件评价是推迟到运行时间,并且编译器对身体产生的代码的if
。我的问题是,如果有办法让编译器在sizeof...(args) == 0
的情况下不生成代码,而不使用模板专门化技术。现代C++中有没有解决方法?
“使得编译器在sizeof ...(args)== 0'的情况下不生成代码”如果(优化的)版本为此生成代码,请向供应商提交错误。 –
对不起,我生成了调试配置的代码。 –
你*可以*使用多态lambda表达式实现某种内联标签分派:[example](http://coliru.stacked-crooked.com/a/616a698807b2148f)。如果您查看[生成的代码](https://godbolt.org/g/20EFoS),即使在-O0,也不会出现从未采取的“分支”。虽然我认为人类阅读器和编译器都可以通过常规标签发送或SFINAE方法轻松实现:) – melak47