Like this:
class Blah { static std::string const className() { return "Blah"; }};
std::string const name = Blah::className();
assert(name == "Blah");
Or this:
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");
Fancier:
#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();
...
Or this:
class Blah : QObject { Q_OBJECT };
Or this:...
Or this: ...
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…