看板 C_and_CPP 關於我們 聯絡資訊
template<typename Func, typename T> void apply(Func func_ptr,T x){func_ptr(x);} template<typename T> void multi(T); template<typename T> void multi(T*); 以上,是書上看到的內容,上面說明 apply(&multi<int>,7); //error:符合multi<int>形式的函式不只一個 但是我的問題是,雖然multi<int>形式,兩個multi都符合, 但是"7"是int不是int*啊,為什麼書上說無法推導出來要執行哪一個? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.164.117
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