[問題] template 裡印出型別引數資訊

看板C_and_CPP (C/C++)作者 (小J)時間13年前 (2013/05/31 17:44), 編輯推噓1(1011)
留言12則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux GNU 5.7.2 問題(Question): 目前有個 template<typename T> class foo{ public: void print_type(){ //我想要在這邊print出type的資訊 //也就是T到底會是什麼 } }; 補充說明(Supplement): 目前我已知兩個方法 1)typeid 但是因為好像不是標準的東西 每個compiler都會印出不同東西... 而且印出來的type也不完整(會多也會少字 怕字串處理後會有例外 2)__PRETTY_FUNCTION__ 好像是gnu專用? 這就很符合我的需要(雖然還是要將不需要的資訊刪除 主要是擔心怕說只用其他compiler後,會出問題(不同輸出資料或者根本無法使用) 所以不知道有沒有其他方法? 看起來標準內好像沒有東西可以做出這個... 或者是我眼殘沒看到orz 感謝各位板友 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.157.161

05/31 17:50, , 1F
typeid應該是標準吧?
05/31 17:50, 1F

05/31 20:08, , 2F
但是得到的 std::type_info 卻是 implementation defined
05/31 20:08, 2F

05/31 20:09, , 3F
([18.7.1-9] Returns: An implementation-defined NTBS)
05/31 20:09, 3F

05/31 20:10, , 4F
([18.7.1-1] 也提到它的實際內容是 unspecified)
05/31 20:10, 4F

05/31 20:14, , 5F
C++11 的 type_index 倒是提供了一個自己設定的方法
05/31 20:14, 5F

05/31 20:14, , 6F
可參考 cppreference 的例子: http://tinyurl.com/b2r55yo
05/31 20:14, 6F

06/01 01:43, , 7F
這樣自己 mapping 就好啦 xD
06/01 01:43, 7F

06/01 02:00, , 8F
反正具現化這些小東西好像不用錢, 就開下去吧
06/01 02:00, 8F

06/01 02:00, , 9F

06/01 02:10, , 10F
無視標準的話gnu libstdc++有提供他的demangling function
06/01 02:10, 10F

06/01 02:10, , 11F
//gcc.gnu.org/onlinedocs/libstdc++/manual/
06/01 02:10, 11F

06/01 02:11, , 12F
ext_demangling.html
06/01 02:11, 12F
文章代碼(AID): #1Hg7410B (C_and_CPP)
文章代碼(AID): #1Hg7410B (C_and_CPP)