我有以下的代碼:編譯時代碼生成
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