一些常见的模板专业化是这样的:
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
这种情况,因为它可能使您在任何给定情况下都可以使用界面的哪些部分并不明显。也许模板专业化在某些情况下仍然提供更清晰的语法。