C++相当于Java的this.getClass().getSimpleName();
C++ equivalent of Java's this.getClass().getSimpleName();
在Java中,如果我想使用对象类的名称,我可以写:
String myString = this.getClass().getSimpleName();
这C++等价物是什么?也就是说,如何获取带有 *this
类名称的字符串?
标准C++中没有等价物。 你会得到的最接近的是typeid(*this).name()
,但不能保证"名称"会是什么样子 - 结果是实现定义的。 它基本上是你的编译器决定放在那里的任何内容,它可能与源代码中的类名称相对应,也可能不对应。有关详细信息,请参阅 cppreference.com。
如果你想知道一个类的名称,你可以写一个返回可读名称的函数。 但除此之外,您基本上会坚持使用上述代码返回的任何内容。
其中 A 是类
typeid(A).name()
为此,
我们可以创建自己的函数,
class ClassName
{
static std::string const className()
{
return "ClassName";
}
};
std::string const name = ClassName::className();
QObject->metaObject()
方法对Qt
有效,但基于QGraphicsItem
的类除外,这些类不继承自QObject
。