模板參數推導失敗:了解非推導上下文
在您的程式碼中,您定義了兩個函數(temp 和temp2) ,它們旨在根據參數類型推導模板實參。但是,您會遇到編譯器錯誤,指出它無法推斷這些參數。
問題源自於在函數定義中使用 typename 關鍵字:
// Example 1 template <class A> A temp(typename S<A>::type a1) // Example 2 template <class A, class B> B temp2(typename S<A>::type a1, B a2)
使用範本範本參數時, typename 是引用範本類別中的依賴名稱所必需的。然而,在函數的上下文中並非如此,其中 S::type 只是一個非依賴類型。
在 C 中,當模板參數用於決定其類型的上下文。但是,在本例中,模板參數 A 在非推導上下文中使用,因為它僅出現在引用類型的聲明中:
typedef typename T& type;
因此,編譯器無法從函數呼叫。要解決此問題,您需要在呼叫這些函數時明確指定模板參數:
temp<char>(c);
透過提供明確參數,編譯器能夠使用適當的類型正確實例化模板。
以上是為什麼我的 C 模板參數推導在非推導上下文中失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!