2015-03-02 142 views
2

我可以决定编译器可以生成哪些类型的模板类?类模板:限制模板参数

说我希望下一个类只能够容纳实数(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

SFINAE与is_integral。 – 2015-03-02 17:02:44

+3

@LuchianGrigore:SFINAE是用于控制重载分辨率的函数模板。这需要'static_assert'和'is_floating_point'。 – 2015-03-02 17:03:55

回答

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

这将在类型会导致编译时错误不适合。

相关问题