如何获取void*指针的typeid?

Sim*_*ter 9 c++ rtti

我有一个指向对象的指针列表.这些对象没有任何共同之处(即没有共同的基类); 为了更好地理解:它是GUI中鼠标光标下的对象列表.

现在我想知道它是什么样的物体.节点,节点句柄,线段,标记等.但是我不能使用,typeid(*ptr)因为ptr是一个const void*.

对此有何解决方案?我可以强制使用typeid,因为我知道指针始终指向对象而不仅仅是值?或者没有办法添加一些假的共同基类?

(编辑:目前我正在这样做,我在列表中存储一个结构,另外存储对象的类型(作为枚举).也许我应该更改它来存储一个type_info对象...)

Che*_*Alf 10

对于技术解决方案,不考虑设计级别,使用std::map或散列表(无论如何)将无类型指针与类型描述符或类型指针相关联,当然在用户开始使用鼠标之前.

在更高的层次上,void*指针只是ungood.

最好是修改设计,而不是使用像这样的kludge std::map.

干杯和hth.


Ale*_*ler 6

您绝对应该引入一个多态虚拟基类或此目的。否则,您需要reinterpret_cast/static_cast首先对另一个可能不相关的指针类型执行 a 操作,以便能够调用dynamic_cast. 由于在 C++ 中访问错误类型的对象是未定义的,因此这样的使用dynamic_cast将触发未定义的行为。

从技术上讲,RTTI 信息通常存储在对象 vtable 的字段中,因此劫持二进制表示可能会起作用并为您提供每个类型的唯一指针。请不要这样做。