std::function 模板參數簽章中的歧義
當兩個function
為了說明這一點,請考慮以下類別:
<code class="cpp">template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };</code>
當編譯器嘗試為重載集找到可行的函數時,它會搜尋潛在的轉換。在這種情況下,myfunc 的兩個建構子都會接受任何內容,允許從 int(*)() 到 myfunc
因此,當呼叫a(x) 或a(y) 時,編譯器會遇到兩個可行的函數,從而導致歧義。
解決方法
宣告和定義函數時,std::function 的模板參數簽章是其類型的一部分。然而,在物件構造期間,簽名被忽略。
為了避免歧義,可以:
以上是為什麼 `std::function` 會導致模板參數簽章不明確?的詳細內容。更多資訊請關注PHP中文網其他相關文章!