如何將僅接受數字類型(int
,double
,float
等)的類模板編寫爲模板?數字類型的類模板
Q
數字類型的類模板
20
A
回答
26
您可以使用std::is_arithmetic
類型特徵。如果你想只啓用一個類的實例這樣的類型,結合使用它std::enable_if
:
#include <type_traits>
template<
typename T, //real type
typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type
> struct S{};
int main() {
S<int> s; //compiles
S<char*> s; //doesn't compile
}
對於一個版本的enable_if
這是更容易使用,以及免費添加disable_if
,我極力推薦閱讀this wonderful article(或cached version)。
3
,我發現,template<typename T, typename = ...>
方法非常隱祕(VS 2015年)收到錯誤消息,但發現,與同類型性狀的static_assert
也適用,讓我指定的錯誤消息:
#include <type_traits>
template <typename NumericType>
struct S
{
static_assert(std::is_arithmetic<NumericType>::value, "NumericType must be numeric");
};
template <typename NumericType>
NumericType add_one(NumericType n)
{
static_assert(std::is_arithmetic<NumericType>::value, "NumericType must be numeric");
return n + 1;
}
int main()
{
S<int> i;
S<char*> s; //doesn't compile
add_one(1.f);
add_one("hi there"); //doesn't compile
}
+0
當然。在這裏添加這條信息會很好。 – kyb
相關問題
- 1. 模板的數據類型
- 2. 以類型的模板類
- 3. 字符模板類型參數
- 4. 模板參數類型爲字符串
- 5. 類型參數E隱藏類型E.類的泛型模板
- 6. C++模板模板非類型參數
- 7. 類型(函數模板):C++
- 8. 非模板類型參數
- 9. 非類型模板參數
- 10. 非類型模板數組?
- 11. 模板參數類型
- 12. 非類型模板參數
- 13. 非類型模板參數
- 14. 模板類與非類型模板參數成員函數
- 15. 同類型模板類的內部函數模板
- 16. 根據模板參數包裝類型容器的模板類
- 17. 使用模板類的嵌套類型作爲模板參數
- 18. 模板類類型轉換
- 19. 模板類定義類型
- 20. C#值類型類模板
- 21. 類型檢查模板類參數
- 22. 爲什麼浮點類型模板函數的模板參數類型無效?
- 23. 成員函數的模板類和類型返回類型
- 24. 函數指針非類型模板參數轉換爲類型模板參數
- 25. Typedef代碼重複。模板類型中的模板類型
- 26. 模板類型推演:不同的模板類型
- 27. C++,返回類型爲模板類型的模板
- 28. C++ - 一個模板類專業函數模板與非類型模板參數
- 29. 雙模板類型?
- 30. 爲模板類型
@KonradRudolph待辦事項你還想修復標題?我很困惑,如果OP真的意味着類型或實際上意味着這些類型的常量。 – pmr
@pmr我沒有(但我現在做),很好。我相當肯定,OP意味着類型,如果沒有其他原因,您不能將非整型類型用作非類型模板,並且在討論非類型模板時該問題沒有任何意義。 –
@KonradRudolph是的,我的意思是類型。 – djWann