【发布时间】:2022-01-01 15:54:01
【问题描述】:
我正在尝试使用 std::enable_if_t 和 std::is_integral_v 模板来专门化一个类的 mem-func。我读过this,但它是关于通用函数而不是成员函数。
我模仿它并编写我的代码如下,但它不起作用。
namespace oct {
class Class1 {
template< typename T> T memf();
};
template< typename T>
std::enable_if_t< std::is_integral_v<T>, T> Class1::memf() {
std::cout << "Integral." << std::endl;
return 1;
};
template< typename T>
std::enable_if_t < ! std::is_integral_v<T>, T > Class1::memf() {
std::cout << "None-Integral." << std::endl;
return T {};
};
};
编译错误消息:
没有声明匹配‘std::enable_if_t
oct::Class1::memf()
【问题讨论】:
-
您不能部分特化函数模板。您需要使用重载而不是专业化。
标签: c++ templates c++17 template-specialization conditional-compilation