[問題] template argument deduction

看板C_and_CPP (C/C++)作者 (allstars)時間14年前 (2011/12/20 00:06), 編輯推噓0(0020)
留言20則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux + clang3.0 #include <iostream> class A { }; class X { public: operator A() { return A();} }; void g(A) { std::cout<<"g(A)"<<std::endl; } template <typename T> void f(T x) { g(x); } int main() { f(X()); } code出處 C++ Templat:The Complete Guide 10.3.5 我有稍微改了一下 這裡有作了一個conversion from X to A 但想請問的是 在template arguement deduction 不是會ignore implict type conversion的嗎?? (像這case implict type conversion through user-defined conversion) 為什麼這裡可以編的過呢??? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.135.229

12/20 00:13, , 1F
到 f() 內 呼叫 g() 的時候跟 template 沒有關係, 只
12/20 00:13, 1F

12/20 00:13, , 2F
是在找所有可呼叫的 candidates 而已, 只是一般函式
12/20 00:13, 2F

12/20 00:14, , 3F
的使用概念
12/20 00:14, 3F

12/20 00:15, , 4F
你真的要繼續看下去嗎...?
12/20 00:15, 4F

12/20 01:32, , 5F
請問operator A()的意義在那?不是型別直接就能match
12/20 01:32, 5F

12/20 01:38, , 6F
另外請問return A();是什麼?麻煩了
12/20 01:38, 6F

12/20 02:07, , 7F
請問那個A()是建構子嗎?但感覺又不太對
12/20 02:07, 7F

12/20 02:25, , 8F
請問是否是這個網站內的東西?http://ppt.cc/Z@ew
12/20 02:25, 8F

12/20 09:02, , 9F
love大大 謝謝 我會加油的XD
12/20 09:02, 9F

12/20 09:02, , 10F
diablo 這個例子裡是conversion op
12/20 09:02, 10F

12/20 09:03, , 11F
你的網頁是single argument constructor
12/20 09:03, 11F

12/20 09:03, , 12F
呼叫f()的時候做template argument deduction (T = X)
12/20 09:03, 12F

12/20 09:03, , 13F
這時候不考慮implicit conversion
12/20 09:03, 13F

12/20 09:04, , 14F
然後在f<X>()內呼叫g()的時候 只有一個g可以呼叫 參數型態為A
12/20 09:04, 14F

12/20 09:06, , 15F
然後發現X可轉換為A 就用自定義的X::operator A()轉換過去了
12/20 09:06, 15F

12/20 09:08, , 16F
thanks!
12/20 09:08, 16F

12/20 09:35, , 17F
是先把X轉換為A才能夠match到g(A),p大是不是相反了
12/20 09:35, 17F

12/20 09:37, , 18F
這只是我的想法,請問是否有錯呢...
12/20 09:37, 18F

12/20 11:17, , 19F
是要把X轉成A以後才能call g()沒錯 我想我們講的應該是一樣的
12/20 11:17, 19F

12/20 11:38, , 20F
了解,感謝指導
12/20 11:38, 20F
文章代碼(AID): #1Exs3_0s (C_and_CPP)
文章代碼(AID): #1Exs3_0s (C_and_CPP)