[cppll:8646] クラスの名前を引っ張ってくるには
- Subject:
- [cppll:8646] クラスの名前を引っ張ってくるには
- From:
- Osamu Shigematsu <m5issige@...>
- Date:
- Thu, 08 May 2003 09:25:19 +0900
- X-Mailer:
- Becky! ver. 2.05.11
- Message-Id:
- <20030508091615.9754.M5ISSIGE‐at‐mr.hitachi-medical.co.jp>
こんにちは。重松です。
今書いているプログラムなんですが、基底クラスに、
virtual RWCString getClassName() const;
というのがあって、クラスの名前を引っ張ったり、
実行時のログをとるために、
void
Hoge::doSomeStuff()
{
TRACE("Hoge::doSomeStuff");
// ゴニョゴニョ
}
みたない事をしないといけないんですけど、
いちいち書くのもかったるので何とかしたいのです。
で、TRACE() のところは、TRACE(__func__) と書けば、よさげかしら、
と思ったら、クラスの名前は返してくれないみたいです。
なにか、便利な技はないものでしょうか。
とりあえず、gcc 3.2 20020927 (prerelease), cygwin で試しました。
--
Osamu Shigematsu <m5issige@...>
今書いているプログラムなんですが、基底クラスに、
virtual RWCString getClassName() const;
というのがあって、クラスの名前を引っ張ったり、
実行時のログをとるために、
void
Hoge::doSomeStuff()
{
TRACE("Hoge::doSomeStuff");
// ゴニョゴニョ
}
みたない事をしないといけないんですけど、
いちいち書くのもかったるので何とかしたいのです。
で、TRACE() のところは、TRACE(__func__) と書けば、よさげかしら、
と思ったら、クラスの名前は返してくれないみたいです。
なにか、便利な技はないものでしょうか。
とりあえず、gcc 3.2 20020927 (prerelease), cygwin で試しました。
--
Osamu Shigematsu <m5issige@...>
▼ スレッド
- 8646: 今書いているプログラムなんですが、基底クラスに、 virtual RWCString getClassName() const; というのが Osamu Shigematsu
- └8647: ちっす。 __PRETTY_FUNCTION__をお試しくださいな。(^^ class A { public: void foo() { std::cout << __PRETTY_FUNCTION_ Shin'ya MORINO
- └8651: さくっと試したら、期待の動作になりました。 が...、 http://www.cqpub.co.jp/interface/column/freesoft/2003/ Osamu Shigematsu
- ├8654: やりぃ。 実は、おもいっきし、環境依存対処法でした。失礼。 g++的には、 __FUNCTION__ = __func__ Shin'ya MORINO
- ├8655: class A { public: void foo() { std::cout << typeid(this).name() << "::" << __func__ << std::endl; } 森野慎也 mailto:smorino@ Shin'ya MORINO
- │└8659: 幸いにして、RTTI は使えるので、(当然?) を試したんですが、これだと、 P1A::foo Osamu Shigematsu
- │ ├8660: 高橋(k)です。 TAKAHASHI, kohske kohske‐at‐msc.biglobe.ne.jp TAKAHASHI, Kohske
- │ └8661: type_info::name() は処理系が勝手に決めた文字列を 返せばいいんだそうな。 だから "教えない" と FUKUDA Fumiki
- │ └8662: 文句をゆーのは、堪忍して、あ・げ・る。 だーけーど、許してあげないんだわさー。 >> g++君 Shin'ya MORINO
- │ └8672: g++君は、教えてくれました。 typeid().name()が、返すのは、マングリングされた名前ですよねー。 Shin'ya MORINO
- │ └8677: extern "C" char *__cxa_demangle (const char *__mangled_name, char *__output_buffer, __SIZE_TYPE__ *__length, int *__status); と Osamu Shigematsu
- │ ├8678: mangling の C++ での意味としては「引数の型情報を関数名に付加する」 名古屋大学大学院 情報科 Takao Ono
- │ ├8683: こんばんやっ。(^^ ソース、見てないんですが、単に、__output_bufferの値を、そのまま返して Shin'ya MORINO
- │ └8684: さーらーに、こんばんやっ。 そーなんでしょーかね。切り刻む、とか。 実際、文字列が切り刻 Shin'ya MORINO
- │ └8685: 《誤記・誤植などで》<引用・テキストなどを>だいなしにする 《へたな発音で》<ことばを>わか boochang
- └8666: C++ネタとは関係ないかもしれませんが…。 C99には「__func__」という前定義識別名というのがで seraphy
- ├8667: 盲目的に C 言語の規格に追従することはないでしょうけど, それなりに 名古屋大学大学院 情報 Takao Ono
- └8671: ちーっす。 Bjarne Stroustrup御大のC/C++ Users Journal記事が、やはり、CとC++のいと こ関係について、 Shin'ya MORINO