6

gcc を使用して、typeid を使用してオブジェクト/変数の型を要求すると、type_info::name メソッドから、Windows で得られると予想される結果とは異なる結果が得られます。少しググったところ、RTTI 名は実装固有であることがわかりました。

問題は、Windows で返される型の名前を取得したいということです。これを行う簡単な方法はありますか?

4

3 に答える 3

7

あなたが求めているのであれば、によって返される名前に関して gcc を msvc のように動作させるコンパイラ スイッチはありませんtype_info::name()

ただし、コードでは、gcc 固有の関数に依存できます__cxa_demangle

実際、問題に対処する SO に関する回答があります。

参照: libstdc++ マニュアル、第 40 章

于 2010-01-18T10:18:29.090 に答える
1

c++ の関数名には、クラスとメソッドの名前だけでなく、すべての戻り値と引数の型情報が実際に含まれています。コンパイルされると、それらはアセンブラ シンボルとして機能し、すべての型情報を含む標準形式 (各コンパイラの標準) に「マングル」されます。

デマングラーと呼ばれるこのマングリングを元に戻すには、関数またはプログラムを実行する必要があります。

走ってみてください

c++filt myoutput.txt

関数の出力で。これにより、実際のシンボル名が解読可能な形式に戻されます。

于 2010-01-18T10:47:39.743 に答える
0

この他の質問に基づいてIs there an online name demangler for C++? このためのオンライン ツールを作成しました: c++filtjs

于 2012-03-31T08:01:58.247 に答える