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

using std::enable_if on a method of a templated class

本文关键字:std enable if 方法      更新时间:2023-10-16

请考虑以下代码

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

我希望 neggate(( 方法仅在 D 是算术类型时才存在/可用。 这可能吗?

我想出了一个办法:

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_;
}
};