在模板类的方法上使用std :: enable_if

时间:2019-10-12 01:59:26

标签: c++ c++11 enable-if

考虑以下代码

template <class D> class Box {
private:
  D d_;
public:
  Box(D d) : d_(d) {}

  D value() {
    return d_;
  }
  D negate() {
    return -d_;
  }
};

我希望只有当D是算术类型时,方法negate()才存在/可用。这可能吗?

1 个答案:

答案 0 :(得分:0)

我想出了一种方法:

template <class D> class Box {
private:
  D d_;
public:
  Box(D d) : d_(d) {}

  D value() {
    return d_;
  }

  template< typename T=D >
  typename std::enable_if<is_arithmetic<T>::value, T >::type
    negate() {
    return -d_;
  }
};