Re: c++內如何得到物件的名稱呢?

看板Programming作者 (御風只配做笨木頭)時間18年前 (2007/07/29 10:03), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
※ 引述《journeyman@kkcity.com.tw (㊣"MORTAR─COMBAT─")》之銘言: : ※ 引述《jiannrong ( )》之銘言: : > 請教一下,這裡我會產生兩個物件, : > 只是,我希望在建構子內,看到物件的名稱, : > 請問該如何做呢? : > 我使用this,可是卻顯示出記憶體位址.. : 標準C++好像沒有物件名稱這回事吧 你要自己做進去 : 比如說 自己做一個base class叫做framework 在裡面把物件名稱定義好 : 然後所有的class都繼承framework : 不做就沒有 : 他不像Java設計的時候就把這項也規定進去… 基本上有兩個辦法,不過都不 portable,也不一定有效, 您可以試試看你的環境可不可以弄出來: 1. typeid(*this).name() typeid() 會傳回對應於 object 的的 type_info 物件, 而 type_info.name() 即是取 class 名。 不過,這個「名」是 implementation-defined, 不同的 compiler 有不同的作法,跑出來的名字, 也不一定能夠讓人看得懂。 但如果看得懂的話,你就可以寫一些程式去 parse 這個字串, 轉成你真正想要儲存的格式。 2. 使用 __PRETTY_FUNCTION__ GCC 有提供一個叫做 __PRETTY_FUNCTION__ 的 predefined macro, 就好像 __FILE__ 與 __LINE__ 一樣, __PRETTY_FUNCTION__ 會回傳目前函式的「漂亮且完整的名稱」, 稍加 parse 一下即可取出 class 名的部份。 其他 compiler,有的可能會有類似的東西存在, 不過您就得自己翻翻文件了。 在 C99 standard 裡,也有個 __func__,可以回傳函式的名稱,如: int show_my_name(char unused) { printf("%s", __func__); // 印出 show_my_name return 0; } 因為沒有 name decoration 的問題存在,所以 C99 的 __func__ 可以是 portable 的[1],各家 compiler 都必須產出 "show_my_name"。 不過,若要取 C++ 的 class 名,__func__ 就會很雜亂了。 [1] 當然,也是有尚未支援 C99 的 compiler 就是了,如 VC6。 -- 我的微笑,堅持要有鼻子。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.103.118 ※ 編輯: JeffHung 來自: 60.250.103.118 (07/29 10:05)
文章代碼(AID): #16g_LUIx (Programming)
文章代碼(AID): #16g_LUIx (Programming)