如何使用enable_if来限制整个类

时间:2013-06-06 21:40:51

标签: c++ c++11

我知道我可以使用static_assert并确保类型T是数字但我想使用std :: enable_if。我怎样才能强制使用std :: enable_if或std :: conditional而不继承?下面的Vector3D类是数字的?

template<typename T>
class Vector3D
{
    private:
        T X, Y, Z;
};

我试过了:

template<typename T>
class Vector3D<typename std::enable_if<std::is_integral<T>::value, T>::type>
{
    private:
        T X, Y, Z;
};

1 个答案:

答案 0 :(得分:5)

如果您真的想使用enable_if,可以这样编写课程模板:

template<typename T, typename = typename     
    std::enable_if<std::is_arithmetic<T>::value>::type>
class Vector3D
{
    private:
        T X, Y, Z;
};

但是,正如其他人注意到的那样,使用static_assert可能会更好。