儘管定義了類型,Std::Function 的模板參數中仍存在歧義
在這種情況下,函數“a”存在多個重載,每個重載接受std::function:
的不同簽名由於兩個function
template<class _Fx> function(_Fx _Func, typename _Not_integral<!...int>::_Type = 0);
本質上,任何物件都可以轉換為std::function,從而促進類型擦除並能夠處理任意對象作為函數。
為了進一步說明問題,請考慮以下簡化範例:
template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };
在'a' 的重載解析期間,如果無法辨識可行的重載,編譯器會嘗試使用參數的建構函數或參數的轉換運算子來轉換參數。在這種情況下,轉換是透過 myfunc 的建構函數進行的。
由於 myfunc 的建構子接受任何內容,因此兩個 function
最終,這會導致編譯器無法確定要呼叫 'a' 的哪個重載,從而導致歧義。
To解決這個問題,你有幾個選擇:
以上是為什麼「std::function」的模板參數會導致重載解析中的歧義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!