次のような通常のテンプレートの特殊化:
template<class T>
class C
{
void common() { ... }
void f2 = delete;
};
template<>
class C<int>
{
void common() { ... }
void f1() { ... }
};
次のように表すことができますstatic_if
。
template<class T>
class C
{
void common() { ... }
static_if(std::is_same<T, int>::value)
{
void f1( ) { ... }
}
else
{
void f2( ) = delete;
}
}
これらは直接競合する機能ですか? テンプレートの特殊化でstatic_if
できないことはできますか? static_if
テンプレートの特殊化でできることはすべてできるようです。
余談ですがstatic_if
、このコンテキストはあまり好きではありません。これは、特定の状況でインターフェイスのどの部分を使用できるかがわかりにくくなる可能性があるためです。場合によっては、テンプレートの特殊化により、より明確な構文が提供される可能性があります。