类模板:限制模板参数

时间:2015-03-02 17:01:34

标签: c++ templates

我可以决定编译器可以生成哪些类型的模板类吗?

假设我希望下一个类只能保存实数(float,double)而不是整数类型。

//can I force T to be only real number types?
template<typename T>
class RealNumber
{
public:
    T num;

    RealNumber() : num() {}

    void add(T x) { num += x; }
    T get() const { return num; }
};

所以这会产生编译错误:

RealNumber<int> myrealnumber;

1 个答案:

答案 0 :(得分:10)

您可以断言该类型具有特定的特征:

#include <type_traits>

template<typename T>
class RealNumber
{
    static_assert(std::is_floating_point<T>::value, "Type must be floating point");

    // and so on
};

如果类型不合适,这将导致编译时错误。