2012-01-07 9 views
3

私はRTTIについてよく分かりませんが、実行時に変数の名前を取得できるため、RTTIを利用できます。 スレッドが現在実行している関数の名前を取得できますか?C++で現在の(メンバ)関数名を取得することは可能ですか?

+1

いいえ、RTTIは変数の**名前**を返しません。**タイプ**を決定することができます。 –

+1

[Cのスタックトレースを取得する方法は?](http://stackoverflow.com/questions/105659/how-can-one-grab-a-stack-trace-in-c) –

+0

申し訳ありませんが、私は 'typeid(var).name'がそうしていると思ったが、明らかに変数の型名を返す。 – qdii

答えて

11

C++ 11は現在の機能のために__func__を標準化しました。

さまざまなコンパイラが__FUNCTION__,__PRETTY_FUNCTION__などのバリエーションをサポートしています。

2

GNU互換のものをお使いの場合は、backtraceを試してみてください。

+0

はい、しかし、それはC++やg ++よりもGNU libc(またはLinux)に関連しています。 –

0

C++のrun-time type identificationは、現在でいるメソッドの名前は、オブジェクトの種類を把握することができますが、ない。

0

いいえ、それは不可能です。 C++では、リフレクション(静的でも動的でもない)(C#など)はサポートされていません。あなたはそれをエミュレートするためにいくつかのプリプロセッサの魔法が必要になります。

とは別に、実行時に関数/メソッド名という概念は必ずしもありません(これは、ソースを対応するフラグでコンパイルした場合にのみデバッグ情報として利用できます)。

関連する問題