【发布时间】:2019-12-04 15:27:48
【问题描述】:
我有这样的课:
template<typename T>
MyClass{
//myFunc();
}
我想创建 myFunc 方法,如果类模板是数字则返回数值,而当类模板不是数字时不返回任何内容 (void)。
现在,我得到了这样的东西:
template<typename T>
MyClass{
template <typename returnT>
returnT myFunc();
}
template <typename T>
template <typename returnT>
typename std::enable_if<std::is_arithmetic<T>::value>
T MyClass<T>::myFunc()
{
return T::value;
}
template <typename T>
template <typename returnT>
typename std::enable_if<!std::is_arithmetic<T>::value>
void MyClass::myFunc()
{
//do sth
}
当然,这是行不通的。以这种方式解决这个问题是个好主意吗?什么是“智能”且有效的解决方案?
【问题讨论】:
-
视情况而定,两个版本的功能会不会相差很大?如果您可以使用
c++17,if constexpr可能是一个不错的选择。 -
另外,在需要重载函数的函数中使用 SFINAE。这意味着您需要在课堂上使用两个版本的
myFunc才能正常工作。
标签: c++ templates metaprogramming template-meta-programming