C++相当于Java的this.getClass().getSimpleName();

C++ equivalent of Java's this.getClass().getSimpleName();

本文关键字:getSimpleName getClass this 相当于 Java C++      更新时间:2023-10-16

在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