假設我有一個函數要傳遞給窗體的另一個函數。如何確保模板函數的參數與另一個參數的參數匹配
auto f = [](double x) -> double {
// ...
return 2.0;
};
或這種形式:
double f(double x) {
// ...
return 2.0;
};
我希望有一個模板函數取女,與將用於調用F的另一個理由。
類似:
template <typename F, typename T>
T use_function(F func, T t)
{
return func(t);
};
但我要強制執行T具有相同類型爲f的返回類型。我的主要問題是,當我打電話使用功能,像這樣:
use_function(f, 5);
T的類型變成一個int。而我正在做數學的東西,這給我錯誤的答案,使用整數。所以,一個解決辦法是執行浮點類型莫名其妙......
我想用這個作爲一個解決方案:
template <typename F, typename T>
auto use_function(F func, T temp) -> decltype(func(temp))
{
decltype(func(temp)) t = temp; // This will convert to double if temp was an int....
}
,你怎麼看待這個問題?
充分暴露於C++ 17,充分利用'auto'關鍵字。所有你需要做的是:'template auto use_function(F func,T t) { return func(t); }'。即使'T'是'int',如果'func'返回一個'double',這就是你會得到的。 –
爲了確保它,我經常在一個'std :: function'對象中包含仿函數。如果有任何不匹配,它應該給編譯時錯誤。 – Vivick
@Vivick你可以輸入一個簡單的例子。不知道你的意思 – CptLightning