class foo
{
public:
void say_type_name()
{
std::cout << typeid(this).name() << std::endl;
}
};
int main()
{
foo f;;
f.say_type_name();
}
++グラムで余分な文字を返します。私はなぜP3fooの代わりにfooの代わりに印刷しているのか分かりません。私は型IDは、()のコードプリントグラムと私のUbuntuマシンで<em>P3foo</em> ++上
std::cout << typeid(*this).name() << std::endl;
のようにコードを変更した場合には、3fooを印刷します。
どのような考えですか?
WOW!面白い。さらに2つの質問.. 1 - C++ filtはgccディストリビューションの一部かLINUXの一部ですか? 2 - メソッドやクラスの名前を取得する方法はありますか? –
C++ filtはbinutils(ld(リンカー)とreadelfのような他の小さなutilも入っているパッケージ)の一部です:http://www.gnu.org/software/binutils/ –
それをC++でやってください。しかし、GCCでは、これを行うABIによって公開された機能があります。それはcxxabi.hにあり、__cxa_demangleと呼ばれています。それを混乱した名前だけに渡してください。そのインターフェイスはこのABIに従います:http://www.codesourcery.com/public/cxx-abi/abi.html#demangler –