【发布时间】:2011-07-04 13:30:27
【问题描述】:
我有一个指向对象的指针列表。这些对象没有任何共同点(即没有共同的基类);为了更好地理解:它是位于 GUI 中鼠标光标下的对象列表。
现在我想知道它是什么类型的对象。一个节点、一个节点句柄、一条线段、一个标签等等。但是我不能使用typeid(*ptr),因为ptr 是const void*。
有什么解决办法吗?我可以强制使用 typeid 吗,因为我知道指针总是指向对象而不是单纯的值?还是没有办法添加一些假的通用基类?
(编辑:目前我这样做是在列表中存储一个结构,该结构另外存储对象的类型(作为枚举)。也许我应该将其更改为存储 type_info 对象... )
【问题讨论】:
-
给他们一个通用的基类,并使用它。
typeid用于多态类型,而不是void*。 -
为什么是假的通用基类?如果列表中的每个对象“都是”ObjectLyingUnderTheMouse,那么这不是假的,那么 ObjectLyingUnderTheMouse 是有意义的。如果没有,那就是糟糕的设计,请更改设计。尤其是当您在对象中混合视图和模型时。
-
@larsm:也许是因为问题是“如何获取 void* 指针的 typeid?”,而不是“请告诉我如何重新设计我的代码”;-)
-
@simon:您要求进行反思,这是 C++ 所没有的。但是,您的陈述“这些对象没有共同点”是不正确的。您自己说过:它们是“位于 GUI 中鼠标光标下的对象”。这些对象在在您的设计中没有任何共同点,而您需要反思来解决这种缺乏共性的问题,这是对您设计的反思。
-
@all 感谢您的提示。你是对的——我现在稍微改变了设计并添加了一个公共基类。