コンパイル時定数に基づいて関数にコードを含めたいのですが、static_ifはC++の構文ではありません。if文コンパイル時のconst値
だから私はこの
class TA {
public:
template<bool flag>
void func() {
if(flag)
a++;
}
int a;
};
int main() {
TA a;
a.func<true>();
a.func<false>();
}
のような関数を書くことができると私は、コンパイラは2つの機能を作る保証を持っていると思います。 1つは 'if(flag)a ++'が関数にコンパイルされ、もう1つはコンパイルされない関数です。
この保証は、C++ 17標準に基づいて取得することはできますか、コンパイラベンダーの助けを借りてですか?
ありがとうございました。
テンプレートのインスタンス化は、常に独立した関数です。あなたは 'TA :: func'が 'a ++'コードを含んでいますが、常にスキップしてしまうのではないかと心配していますか? –
aschepler
最適化はそれを考慮する必要がありますが、実際にはテンプレートを特化し、ブール値(真、偽)ごとにテンプレートを上書きすることができるのは2つだけなので、実行可能です。しかし、もう一度...あなたはすべきではない早すぎる最適化のように聞こえます。 –