当我有一个带有成员函数的结构时,我专门使用 std::enable_if
如何将声明与实现分开?
示例代码(在 ideone 中)
struct node
{
template < class T >
void analyze(T t, typename std::enable_if<std::is_integral<T>::value>::type* = 0)
{
std::cout << "is_arithmetic type " << t << "\n";
}
template < class T >
void analyze(T t, typename std::enable_if<std::is_floating_point<T>::value>::type* = 0)
{
std::cout << "is_floating_point type " << t << "\n";
}
void analyze(bool t)
{
std::cout << "is bool type " << t << "\n";
}
};
提前致谢!
最佳答案
就像任何模板化方法一样:
struct node {
template <class T>
void analyze(T t, typename std::enable_if<std::is_integral<T>::value>::type* = 0);
};
template <class T>
void node::analyze(T t, typename std::enable_if<std::is_integral<T>::value>::type*) {
std::cout << "is_arithmetic type " << t << "\n";
}
请注意,您在这里没有模板特化(您不能对成员函数进行部分特化),您有不同的重载。
关于c++ - 使用 std::enable_if 时如何拆分声明和实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41614209/