如果我定义了一个类:
class Blah {};
Run Code Online (Sandbox Code Playgroud)
我怎么能够:
std::string const className = /* What do I need to do here? */;
assert( className == "Blah" );
Run Code Online (Sandbox Code Playgroud)
我不认为typeid().name()是一个好主意,因为它是特定的编译器实现.有没有C++标准或Boost提供的东西?
注意:如果该类继承自Qt的QObject,我可以轻松地使用它QMetaObject::className()来获取类名.
Edw*_*nge 10
像这样:
class Blah { static std::string const className() { return "Blah"; }};
std::string const name = Blah::className();
assert(name == "Blah");
Run Code Online (Sandbox Code Playgroud)
或这个:
class Blah {};
template < typename T > struct name;
template < > struct name<Blah> { static std::string value() { return "Blah"; }};
std::string const classname = name<Blah>::value();
assert(classname == "Blah");
Run Code Online (Sandbox Code Playgroud)
爱好者:
#define DECLARE_NAMED_CLASS( Name ) \
struct Name;\
template < > struct name<Name> { static std::string value() { return #Name; }};\
struct Name
DECLARE_NAMED_CLASS(Blah) {};
std::string const className = name<Blah>::value();
...
Run Code Online (Sandbox Code Playgroud)
或这个:
class Blah : QObject { Q_OBJECT };
Run Code Online (Sandbox Code Playgroud)
或者这个:......或者这个:......