我有一个带有模板方法的类,该参数定义了返回类型。其他一切的默认构造函数都可以,但对于bool,我希望该方法返回true。我试图将它专门化为以下代码,但这不会编译。
class Foo {
template <class T>
T method() {
...
return T();
}
template<>
bool method() {
...
return true;
}
};
我怎么能做到这一点?
答案 0 :(得分:2)
您无法在类范围内进行专门化。根据C ++标准,
14.7.3 / 2 应在包含专用模板的命名空间中声明显式特化。
因此,您应该在命名空间范围内专门化模板成员函数,
template<> // this should be outside the primary template class definition
bool Foo::method() {
return true;
}
答案 1 :(得分:1)
您可以使用SFINAE来达到理想的效果,从技术上来说,可以实现&#34;专业化&#34; (这不可能是另一个答案解释的)过载:
template <class T>
typename std::enable_if<
! std::is_same< T, bool >::value,
T
>::type
method() {
...
return T();
}
template <class T>
typename std::enable_if<
std::is_same< T, bool >::value,
T
>::type
method() {
...
return true;
}
以上是C ++ 11,使用C ++ 14,您甚至可以使用std::enable_if_t
缩短它。