看板 C_and_CPP 關於我們 聯絡資訊
書上看到的例子,節錄部份,如下 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)
loveme00835:函數的概念,你現在已知回傳值,已知函數,但是要回推 01/11 19:40
loveme00835:函數輸入是有難度的 01/11 19:45
scwg: 目標是可以只寫 foo(mc1, mc2) 01/11 23:47
PkmX:不懂你覺得哪裡怪怪的 你寫foo<MyClass1, MyClass2>就已經 01/12 10:28
PkmX:明確指定T1 = MyClass1和T2 = MyClass2了 01/12 10:29
tyc5116:to 樓上,書上說這樣compile不會過(我是還沒有親自驗證過) 01/13 22:54