プリプロセッサ条件でテンプレート関数をコンパイルするにはどうすればよいですか? そのように(ただし、機能していません):
template <bool var>
void f()
{
#if (var == true)
// ...
#endif
}
プリプロセッサ条件でテンプレート関数をコンパイルするにはどうすればよいですか? そのように(ただし、機能していません):
template <bool var>
void f()
{
#if (var == true)
// ...
#endif
}
できません。この名前が示すように、プリプロセッサは、コンパイラの前にソース ファイルを処理します。したがって、テンプレート引数の値はわかりません。
C++17 の導入によりif constexpr
、条件付きコンパイルと同じように、テンプレート内の分岐を破棄できます。
template <bool var>
void f()
{
if constexpr (var == true) {
// ...
}
}
var
ブランチ内のコードは構文的に正しい必要がありますが、が false の場合は完全に破棄されるため、整形式である必要はありません。