gcc を使用して、typeid を使用してオブジェクト/変数の型を要求すると、type_info::name メソッドから、Windows で得られると予想される結果とは異なる結果が得られます。少しググったところ、RTTI 名は実装固有であることがわかりました。
問題は、Windows で返される型の名前を取得したいということです。これを行う簡単な方法はありますか?
gcc を使用して、typeid を使用してオブジェクト/変数の型を要求すると、type_info::name メソッドから、Windows で得られると予想される結果とは異なる結果が得られます。少しググったところ、RTTI 名は実装固有であることがわかりました。
問題は、Windows で返される型の名前を取得したいということです。これを行う簡単な方法はありますか?
あなたが求めているのであれば、によって返される名前に関して gcc を msvc のように動作させるコンパイラ スイッチはありませんtype_info::name()
。
ただし、コードでは、gcc 固有の関数に依存できます__cxa_demangle
。
実際、問題に対処する SO に関する回答があります。
c++ の関数名には、クラスとメソッドの名前だけでなく、すべての戻り値と引数の型情報が実際に含まれています。コンパイルされると、それらはアセンブラ シンボルとして機能し、すべての型情報を含む標準形式 (各コンパイラの標準) に「マングル」されます。
デマングラーと呼ばれるこのマングリングを元に戻すには、関数またはプログラムを実行する必要があります。
走ってみてください
c++filt myoutput.txt
関数の出力で。これにより、実際のシンボル名が解読可能な形式に戻されます。
この他の質問に基づいてIs there an online name demangler for C++? このためのオンライン ツールを作成しました: c++filtjs