6

プリプロセッサ条件でテンプレート関数をコンパイルするにはどうすればよいですか? そのように(ただし、機能していません):

template <bool var>
void f()
{
    #if (var == true)
    // ...
    #endif
}
4

4 に答える 4

9

できません。この名前が示すように、プリプロセッサは、コンパイラの前にソース ファイルを処理します。したがって、テンプレート引数の値はわかりません。

于 2012-11-14T11:35:49.010 に答える
1

C++17 の導入によりif constexpr、条件付きコンパイルと同じように、テンプレート内の分岐を破棄できます。

template <bool var>
void f()
{
    if constexpr (var == true) {
    // ...
    }
}

varブランチ内のコードは構文的に正しい必要がありますが、が false の場合は完全に破棄されるため、整形式である必要はありません。

于 2019-08-25T07:03:08.823 に答える