[英]method template specialization by return type
我有一个带有模板方法的类,该方法的参数定义了返回类型。 其他所有的默认构造函数都可以,但是对于bool来说,我希望该方法返回true。 我正在尝试将其专门化为以下代码,但这无法编译。
class Foo {
template <class T>
T method() {
...
return T();
}
template<>
bool method() {
...
return true;
}
};
我该如何实现?
您不能专门研究类范围。 根据C ++标准,
14.7.3 / 2必须在封闭专用模板的名称空间中声明显式专用。
因此,您应该在名称空间范围内专门使用模板成员函数,
template<> // this should be outside the primary template class definition
bool Foo::method() {
return true;
}
您可以使用SFINAE达到所需的效果,从技术上讲,这会将“专业化”(这不能解释为其他答案)变成过载:
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
使其更短。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.