[問題] RTTI

看板C_and_CPP (C/C++)作者 (Shizuru)時間16年前 (2009/03/15 17:24), 編輯推噓6(6016)
留言22則, 4人參與, 最新討論串1/1
我自行寫了一個如下的範例 紅色註明的地方,是我一加上去之後 compile就會告知我Construct的部份出了問題,我不懂原因是什麼,如下: #include <iostream> #include <typeinfo> using namespace std; template <class AnyType = int> class Base { private : AnyType codX; AnyType codY; public : Base(); Base(AnyType, AnyType); Base(const Base<AnyType> &); void showXY() { cout <<"(" <<codX <<", " <<codY <<")" <<endl; }; }; template <class AnyType> Base<AnyType>::Base() { if (typeid(AnyType) == typeid(float)) { codX = 0; codY = 0; } else if (typeid(AnyType) == typeid(double)) { codX = 0.3; codY = 0.5; } else if (typeid(AnyType) == typeid(char)) { codX = 'A'; codY = 'B'; } else if (typeid(AnyType) == typeid(string)) { codX = "S"; codY = "H"; } else { codX = 0; codY = 0; } } int main() { Base<double> Ob; //Error !? system("pause"); return 0; } 我不懂為什麼這樣寫不會過 他的Error如下: cannot convert `const char[2]' to `double' in assignment 我在Construct中條列式分開,判斷的部份不會判斷到string的部份才對 更何況我放入的型態是double 所以我看不出來compile不會過得原因是什麼? 還請各位指點一下,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.118.54.246 ※ 編輯: godman362 來自: 122.118.54.246 (03/15 17:25)

03/15 17:29, , 1F
codX = 'S'; codY = 'H';
03/15 17:29, 1F

03/15 17:49, , 2F
你該用偏特化,而不是typeid這種用途有限的東西
03/15 17:49, 2F

03/15 17:50, , 3F
總算看懂他要什麼了 http://src.wtgstudio.com/?a8S964
03/15 17:50, 3F

03/15 17:50, , 4F
執行期是不會跑到,可是編譯期一定會編譯到那段
03/15 17:50, 4F

03/15 18:47, , 5F
可以請問一下何謂偏特化嗎? 不瞭L大的意思
03/15 18:47, 5F

03/15 18:48, , 6F
另外想請問C大,萬一我不只有要判斷這些型態怎麼辦
03/15 18:48, 6F

03/15 18:48, , 7F
這樣不就要寫非常多個case嗎
03/15 18:48, 7F

03/15 19:02, , 8F
C大貼的寫法就是特化(sorry我講錯了
03/15 19:02, 8F

03/15 19:02, , 9F
單一參數沒什麼好偏特化的,囧)
03/15 19:02, 9F

03/15 19:03, , 10F
你現在的寫法還不是要寫很多個case = =
03/15 19:03, 10F

03/15 19:08, , 11F
你得到他了 RTTI我都用在子物件因為參數傳遞被轉型成父
03/15 19:08, 11F

03/15 19:08, , 12F
物件的時候還原其原來的面貌
03/15 19:08, 12F

03/15 19:17, , 13F
l大抱歉,我的意思是說要寫很多的construct
03/15 19:17, 13F

03/15 19:18, , 14F
關於C大您用的地方不是很瞭解,請問有範例可以借參考嗎
03/15 19:18, 14F

03/15 19:19, , 15F
另外想問,為什麼我原本的寫法會出問題呢?
03/15 19:19, 15F

03/15 19:19, , 16F
Ctor如果要針對不同型別給予不同初始值的話就=您所理解的
03/15 19:19, 16F

03/15 19:21, , 17F
http://ppt.cc/k8Ai C++ Gossip: 執行時期型態資訊(RTTI
03/15 19:21, 17F

03/15 19:24, , 18F
我之前的確是參考C大您所給予的網頁
03/15 19:24, 18F

03/15 19:26, , 19F
先謝過C大以及L大的指點,感謝
03/15 19:26, 19F

03/16 17:37, , 20F

03/16 17:38, , 21F
string是class,因此把typeid(string)這一行註解掉
03/16 17:38, 21F

03/16 17:38, , 22F
答案就對了
03/16 17:38, 22F
文章代碼(AID): #19lCb66t (C_and_CPP)
文章代碼(AID): #19lCb66t (C_and_CPP)