gpt4 book ai didi

c++ - 如何获取类(class)名称?

转载 作者:IT老高 更新时间:2023-10-28 23:15:20 30 4
gpt4 key购买 nike

如果我定义了一个类:

class Blah {};

我该怎么做:

std::string const className = /* What do I need to do here? */;
assert( className == "Blah" );

我认为 typeid().name() 不是一个好主意,因为它是 compiler implementation具体的。 C++ 标准或 Boost 是否提供了什么?

注意:如果类继承自 Qt 的 QObject,我可以很容易地使用 QMetaObject::className() 来获取类名。

最佳答案

像这样:

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 };

或者这个:...或者这样:...

关于c++ - 如何获取类(class)名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4466088/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com