我有一个指向对象的指针列表.这些对象没有任何共同之处(即没有共同的基类); 为了更好地理解:它是GUI中鼠标光标下的对象列表.
现在我想知道它是什么样的物体.节点,节点句柄,线段,标记等.但是我不能使用,typeid(*ptr)因为ptr是一个const void*.
对此有何解决方案?我可以强制使用typeid,因为我知道指针始终指向对象而不仅仅是值?或者没有办法添加一些假的共同基类?
(编辑:目前我正在这样做,我在列表中存储一个结构,另外存储对象的类型(作为枚举).也许我应该更改它来存储一个type_info对象...)
Che*_*Alf 10
对于技术解决方案,不考虑设计级别,使用std::map或散列表(无论如何)将无类型指针与类型描述符或类型指针相关联,当然在用户开始使用鼠标之前.
在更高的层次上,void*指针只是ungood.
最好是修改设计,而不是使用像这样的kludge std::map.
干杯和hth.
您绝对应该引入一个多态虚拟基类或此目的。否则,您需要reinterpret_cast/static_cast首先对另一个可能不相关的指针类型执行 a 操作,以便能够调用dynamic_cast. 由于在 C++ 中访问错误类型的对象是未定义的,因此这样的使用dynamic_cast将触发未定义的行为。
从技术上讲,RTTI 信息通常存储在对象 vtable 的字段中,因此劫持二进制表示可能会起作用并为您提供每个类型的唯一指针。请不要这样做。
| 归档时间: |
|
| 查看次数: |
5691 次 |
| 最近记录: |