看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《tyc5116 (累人啊....)》之銘言: : template<typename T1,typaname T2> : void foo(typename RParam<T1>::Type p1, ^^^^^^^^^^ : typename RParam<T2>::Type p2){} : int main(){ : MyClass1 mc1; : MyClass2 mc2; : foo<MyClass1,MyClass2>(mc1,mc2); : return 0; : } : 書上說foo無法經由引數推導 : 因為template parameters只出現在函式參數的qualifiers上 : 因此呼叫端必須明確指定templates arguments. : 對這句話的意思不清楚,可以麻煩解釋一下嗎? 謝謝 如果你只寫 foo(mc1, mc2) 表示 compiler 需要尋找出適當的 T1 和 T2 使得 RParam<T1>::Type 剛好等於 MyClass1 而且 RParam<T2>::Type 又等於 MyClass2 不但需要花很多時間,而且符合條件的 T1 與 T2 還可能有許多組答案 所以 compiler 會拒絕進行推導 直接要你提供正確的 T1 與 T2 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.3.139
loveme00835:補充一下, 思考如果 RParam 對某個型別作全特化, 應該 12/23 14:28
loveme00835:就可以想像了 12/23 14:28
tyc5116:大概了解了,謝謝 12/23 14:32
loveme00835:如同 function 多對一, 現在則是作逆推 12/23 14:33