推 LPH66:無法判斷 multi<int> 是 void (*)(int) 還是 void (*)(int*) 12/16 15:23
→ LPH66:叫 multi<int> 的函式有兩個 只叫名字是分不出來的 12/16 15:23
→ LPH66:它並不會去管你的函式裡是怎麼呼叫的 12/16 15:24
→ LPH66:你可以試想另一個和 apply 很像的叫 apply2 好了 12/16 15:24
→ LPH66:除了 func_ptr(x); 改成 func_ptr(&x); 之外都一樣 12/16 15:25
→ LPH66:你覺得編譯器要怎麼分出 apply 和 apply2 的 Func 分別是啥? 12/16 15:25
→ tyc5116:不是很懂..不懂的點在於,回到最基本的.... 12/16 15:37
→ tyc5116:void call(int a);和void call(double a);它會根據type去 12/16 15:37
→ tyc5116:判斷,換成template為什麼就不行 12/16 15:38
推 LPH66:因為這個判斷必須在 apply 呼叫時就得先決定下來 12/16 15:51
→ LPH66:不然 compiler 無法產生特化版的 apply 12/16 15:51
→ LPH66:因此並不能等到 apply 編譯時才去做選擇 12/16 15:52
→ tyc5116:恩....謝謝,試了一下,知道差別在哪了 12/16 15:59
→ loveme00835:g++ 4.4.5 applys the first match of candidates 12/16 16:49
→ loveme00835:use 'multi<int>' instead 12/16 16:55
→ loveme00835:error comes from using the & operator 12/16 16:59
推 allstarschh:我用g++ 4.4.3 compile會過 他選multi T那個 12/17 19:19