如果我的类成员的类型与类型匹配,如何编译时可以编译type_check并只编译我的类的一部分?

时间:2018-05-19 11:18:57

标签: c++ templates compilation

template<class T = int>
struct v2 {
  T x;
  // this is the part
  template<class T, std::enable_if?>
  v2& operator++(int n) {}
};

我想启用它,以便++v2仅在它是整数(或长整数)时编译,如果是其他任何东西则不编译。

1 个答案:

答案 0 :(得分:1)

您需要部分专门化v2

template<class T = int, typename = void>
struct v2 {
  T x;
};

template<class T>
struct v2<T, std::enable_if_t<std::is_same_v<T, int> || std::is_same_v<T, long>>> {
  T x;
  v2& operator++(int);
};

或者,可以将常用功能放在另一个用作v2基础的类中。