c++ - 使用 std::enable_if 时如何拆分声明和实现

标签 c++ c++11

当我有一个带有成员函数的结构时,我专门使用 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/

相关文章:

c++ - 迭代器在第 8 个元素 PLF::Colony 上不引用任何内容

c++ - 在 C++98 中,如何在不展开的情况下退出进程?

c++ - boost.variant派生类型: cannot use copy constructor

c++ - 存在重载命名空间函数时需要 std::qualifier 吗?

c++11 - 使用forward_as_tuple发送初始化列表

c++ - C++引用变量

C++ 创建一个类的实例?

c++ - 具有信号量同步的逻辑环形缓冲区

c++ - 链表 : Segmentation fault

C++函数指针作为模板