我已經定義了一個這樣的通用函式:
template <typename T1, typename T2>
T2 Calculation(T1 arg_one, T1 arg_two)
{
return arg_one arg_two * 3.14;
}
當我嘗試使用以下通用函式時:
auto sum = Calculation(2, 3.2);
編譯器告訴我:沒有找到匹配的多載函式。但是,當我嘗試使用這個通用函式時Calculation<double, double>,它作業正常。
為什么編譯器無法在第一個樣本中推斷出引數的型別和回傳值?我必須明確定義型別?
uj5u.com熱心網友回復:
問題是T2不能從任何函式引數推匯出來,也T2沒有任何默認引數,模板引數不能從回傳型別推匯出來。
要解決這個問題,您可以T2在呼叫函式時顯式指定模板引數,也可以更改T1 arg_two為,T2 arg_two這樣T2也可以推匯出來T1,如下所示:
template <typename T1, typename T2>
//-------------------------vv---------->changed T1 to T2 so that T2 can be deduced from passed second argument
T2 Calculation(T1 arg_one, T2 arg_two)
{
return arg_one arg_two * 3.14;
}
auto sum = Calculation(2, 3.2); //works now
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513865.html
標籤:C 模板元编程
