0

タイトルが示すように、クラスオブジェクトポインタからクラス名を知るためのg ++​​組み込み関数(またはメソッド)はありますか?例えば、

class Base {
};
class A : public Base {
};
class B : public Base {
};

void some_func(Base *p) {
    printf("the name of class: %s", __some_g++_builtin_get_class_name(p) );
}

gcc組み込みの__PRETTY_FUNCTION__と同様に、ソースコードの分析に役立つg++の組み込み関数があることを願っています:)

4

1 に答える 1

1

これには typeid を使用できる場合があります。

#include <cstdio>
#include <typeinfo>

class Base {
    virtual int foo() { return 0; }
};
class A : public Base {
};
class B : public Base {
};

void some_func(Base *p) {
    printf("the name of class: %s\n", typeid(*p).name() );
}

int main() {
    some_func(new A);
}

残念ながら、基本クラスに少なくとも 1 つの仮想関数がない限り、おそらく期待どおりの結果が得られません (そうでない場合、型情報が利用できない可能性があります)。

とは異なり__PRETTY_FUNCTION__、探している値はコンパイル時に計算できません。

于 2012-11-17T05:20:55.217 に答える