2015-03-02 141 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 
}; 

這將在類型會導致編譯時錯誤不適合。

相關問題