Re: c++內如何得到物件的名稱呢?
※ 引述《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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章