[問題] template引數推導

看板C_and_CPP (C/C++)作者 (累人啊....)時間13年前 (2013/01/11 17:32), 編輯推噓1(105)
留言6則, 4人參與, 最新討論串1/1
書上看到的例子,節錄部份,如下 template <typename T1,typename T2> void foo(typename RParam<T1>::Type p1, typename RParam<T2>::Type p2) {...} RParem<T>::Type 用來篩選type為T 或 const& T int main(){ MyClass1 mc1; MyClass2 mc2; foo<MyClass1,MyClass2>(mc1,mc2); return 0; } 書上說上面這樣的寫法無法自動引數推導,原因是 "template parameters 只出現在函式參數的qualifiers上, 因此呼叫端必須明確指定templates arguments" 對於這兩句不是很清楚 我的想法是,foo<MyClass1,MyClass2>(mc1,mc2) 可先推導出最外層的T1=MyClass1,T2=MyClass2 所以內層的RParam<T1>::Type = RParam<MyClass1>::Type RParam<T2>::Type = RParam<MyClass2>::Type 那麼foo<MyClass1,MyClass2>(mc1,mc2)看起來應該是所有的type都推導出來啦 這樣的想法我是覺得好像哪裡怪怪的,但又不知道是哪裡不對 書上是有把正確的寫法寫出來(就是再包一層) 但我還是不太懂這樣的寫法為麼不行,可以請哪個理解的大大 能用更淺顯易懂的方式表達嗎?謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.238.4 ※ 編輯: tyc5116 來自: 220.134.238.4 (01/11 17:35)

01/11 19:40, , 1F
函數的概念,你現在已知回傳值,已知函數,但是要回推
01/11 19:40, 1F

01/11 19:45, , 2F
函數輸入是有難度的
01/11 19:45, 2F

01/11 23:47, , 3F
目標是可以只寫 foo(mc1, mc2)
01/11 23:47, 3F

01/12 10:28, , 4F
不懂你覺得哪裡怪怪的 你寫foo<MyClass1, MyClass2>就已經
01/12 10:28, 4F

01/12 10:29, , 5F
明確指定T1 = MyClass1和T2 = MyClass2了
01/12 10:29, 5F

01/13 22:54, , 6F
to 樓上,書上說這樣compile不會過(我是還沒有親自驗證過)
01/13 22:54, 6F
文章代碼(AID): #1Gxzn4D- (C_and_CPP)
文章代碼(AID): #1Gxzn4D- (C_and_CPP)