当尝试某个功能模板的特殊化时,有没有办法引发编译时错误?
说
template<typename T> T Factorial(T n) { ... }
short n;
cout << Factorial(n); // Error, short is too small
有没有办法对模板类的特定方法实现相同的效果?
说
template<typename T> class Arithmetic
{
T n;
T GCD(T m) { ... }
T Factorial() { ... }
};
Arithmetic<short> A;
short m;
cout << A.GCD(m); // Ok
cout << A.Factorial(); // Error, short is too small
答案 0 :(得分:3)
This可以解决问题:
template<typename T>
class Foo {
public:
Foo() {
static_assert(sizeof(T) > sizeof(short));
}
};
int main() {
Foo<short> foo;
return 0;
}
(请注意static_assert
没有诊断消息需要C ++ 17)