C ++:`enable_if`来限制支持特定算术运算的类型

Vit*_*aev 2 c++ sfinae

我想定义可只适用于各类模板函数的支持乘法,例如intlongfloat,和自定义类型的重载运营商如Martix

class Matrix {
    public:
        Matrix operator*(const Matrix& other) const;
}
Run Code Online (Sandbox Code Playgroud)

是否可以通过这种方式限制模板类型?

template <typename T, typename = std::enable_if_t< /* multiplication is defined */ >>
T power (T base, unsigned int exponent) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

ste*_*ena 6

如果只需要测试,如果类型可以自身相乘,则可以使用:

template <class T, 
          class = decltype(std::declval<T>() * std::declval<T>())>
T power (T base, unsigned int exponent) {
     ...
}
Run Code Online (Sandbox Code Playgroud)