作者tyc5116 (累人啊....)
看板C_and_CPP
標題[問題] template引數推導
時間Fri Jan 11 17:32:49 2013
書上看到的例子,節錄部份,如下
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