模板參數推導和非推導上下文
在C 中,模板參數推導允許編譯器根據類型決定模板參數的類型傳遞給模板函數或類別的參數。但是,在涉及非推導上下文的某些場景中,此機制可能會失敗。
考慮以下程式碼片段:
template <class T> struct S { typedef T& type; }; template <class A> A temp(S<A>::type a1) { return a1; } template <class A, class B> B temp2(S<A>::type a1, B a2) { return a1 + a2; }
這裡,S 結構體用作獲取對該類型的引用的一種方式由模板參數 A 保存。但是,當嘗試使用整數值呼叫這些函數時,如下所示,編譯器會報告錯誤:
int main() { char c = 6; int d = 7; int res = temp(c); int res2 = temp2(d, 7); }
錯誤訊息:
錯誤訊息:
錯誤訊息:
錯誤訊息1 :temp(S::type):無法推導出A
的模板參數temp<char>(c);
以上是為什麼模板參數推導在非推導上下文中失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!