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

时间:2014-01-01 09:57:27

标签: java c++ class rtti names

在Java中,如果我想使用对象类的名称,我可以写:

String myString = this.getClass().getSimpleName();

C ++与此相当的是什么?也就是说,如何获得具有*this类的名称的字符串?

3 个答案:

答案 0 :(得分:5)

标准C ++中没有等价物。你得到的最接近的是typeid(*this).name(),但不能保证“名称”的样子 - 结果是实现定义的。它基本上就是你的编译器决定放在那里的东西,它可能与源代码中的类名相对应,也可能不对应。有关详细信息,请参阅cppreference.com

如果您想知道可以更改其代码的类的名称,您可以编写一个返回可读名称的函数。但除此之外,你基本上都会遇到上述代码返回的内容。

答案 1 :(得分:1)

其中A是班级

typeid(A).name()

答案 2 :(得分:0)

我们可以创建我们自己的功能,

class ClassName
{ 
     static std::string const className() 
     { 
         return "ClassName"; 
     }
};
std::string const name = ClassName::className();

QObject->metaObject()方法仅适用于Qt,但基于QGraphicsItem的类不会从QObject继承。