像这样:
class Blah { static std::string const className() { return "Blah"; }};
std::string const name = Blah::className();
assert(name == "Blah");
或这个:
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");
更高级:
#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();
...
或这个:
class Blah : QObject { Q_OBJECT };
或者这个:... 或者这个:...