[問題] template arguments問題

看板C_and_CPP (C/C++)作者 (累人啊....)時間14年前 (2011/12/16 15:19), 編輯推噓3(3014)
留言17則, 4人參與, 最新討論串1/1
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

12/16 15:23, , 1F
無法判斷 multi<int> 是 void (*)(int) 還是 void (*)(int*)
12/16 15:23, 1F

12/16 15:23, , 2F
叫 multi<int> 的函式有兩個 只叫名字是分不出來的
12/16 15:23, 2F

12/16 15:24, , 3F
它並不會去管你的函式裡是怎麼呼叫的
12/16 15:24, 3F

12/16 15:24, , 4F
你可以試想另一個和 apply 很像的叫 apply2 好了
12/16 15:24, 4F

12/16 15:25, , 5F
除了 func_ptr(x); 改成 func_ptr(&x); 之外都一樣
12/16 15:25, 5F

12/16 15:25, , 6F
你覺得編譯器要怎麼分出 apply 和 apply2 的 Func 分別是啥?
12/16 15:25, 6F

12/16 15:37, , 7F
不是很懂..不懂的點在於,回到最基本的....
12/16 15:37, 7F

12/16 15:37, , 8F
void call(int a);和void call(double a);它會根據type去
12/16 15:37, 8F

12/16 15:38, , 9F
判斷,換成template為什麼就不行
12/16 15:38, 9F

12/16 15:51, , 10F
因為這個判斷必須在 apply 呼叫時就得先決定下來
12/16 15:51, 10F

12/16 15:51, , 11F
不然 compiler 無法產生特化版的 apply
12/16 15:51, 11F

12/16 15:52, , 12F
因此並不能等到 apply 編譯時才去做選擇
12/16 15:52, 12F

12/16 15:59, , 13F
恩....謝謝,試了一下,知道差別在哪了
12/16 15:59, 13F

12/16 16:49, , 14F
g++ 4.4.5 applys the first match of candidates
12/16 16:49, 14F

12/16 16:55, , 15F
use 'multi<int>' instead
12/16 16:55, 15F

12/16 16:59, , 16F
error comes from using the & operator
12/16 16:59, 16F

12/17 19:19, , 17F
我用g++ 4.4.3 compile會過 他選multi T那個
12/17 19:19, 17F
文章代碼(AID): #1Ewl4Awq (C_and_CPP)
文章代碼(AID): #1Ewl4Awq (C_and_CPP)