[英]C++ template argument of unknown type
假設我們要編寫一個應該獲取值作為模板參數的函數(例如,出於效率方面的考慮),但是我們事先不知道期望的參數類型。 可以將其實現為
template<typename T, T val>
func() { cout << val; }
但是,調用這樣的函數並不有趣
func<int, 5>()
我們可以通過以下方式重寫功能嗎?
func<5>()
一個主要取決於您的實際功能的解決方案是按以下方式對其進行定義:
template<typename T>
constexpr void func(T val) { }
然后將其作為f(5)
調用,並從函數本身的參數中推導出模板參數。
否則,在C ++ 14中,您無法避免使用模式template<typename T, T value>
。
它與標准模板庫使用的模式相同,例如,請參閱std::integral_constant
的定義。
減輕(可能)樣板的可能解決方案基於使用結構,例如:
template<typename T>
struct S {
template<T value>
static void func() {}
};
您可以執行以下操作:
using IntS = S<int>;
// ....
IntS::func<5>();
使用即將發布的C ++ 17版本,您將可以按照以下步驟進行操作:
template<auto value>
void func() {}
可以將其作為f<5>()
來調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.