Javas Class <?>在C++中的等价物

qwi*_*ipo 4 c++ java

所以我正在学习C++,并希望编写一个实体组件系统.为此,我需要知道组件将其添加到实体时的类型.在java中我会做这样的事情:

Class<?> someClass = myComponent.class;
Run Code Online (Sandbox Code Playgroud)

我能用C++做些什么吗?我尝试过typeid(myComponent),但是在这种情况下不起作用.

ExtComponent* extended = new ExtComponent();
Component* base = dynamic_cast<Component>(extended);
std::cout << typeid(base).name();
Run Code Online (Sandbox Code Playgroud)

这会返回"类组件"但我希望在这种情况下返回"类ExtComponent".我该怎么做呢.

PcA*_*cAF 6

如果我理解正确你想要获得动态类型的对象.(不是变量本身的类型,而是变量(真正)指的是什么)

Typeid将起作用,因为:

N3337 5.2.8/2:

当typeid应用于类型为多态类类型(10.3)的glvalue表达式时,结果引用std :: type_info对象,该对象表示最派生对象(1.8)(即动态类型)的类型 glvalue指[...]

因此,只需添加一些虚拟功能(可选择虚拟基类),他们将做你想做的事情.

此外,你必须应用于typeid对象,而不是指针(因为这将返回type_info指针,而不是对象):

Base *b = new Base;
...
typeid(*b); //not typeid(b)
Run Code Online (Sandbox Code Playgroud)