C++ 从两类中确定无效类型*

C++ Determine type of void* from two classes

本文关键字:无效 类型 两类 C++      更新时间:2023-10-16

我正在使用wxWidgets,我的地图编辑器中有一个搜索功能,用于我的在线游戏。

我搜索对象以查找不同的条件,并按名称将这些对象放入 ComboBox 列表中,并将对象添加为参考数据 (void*(,

我有一个事件onClickResult我想标记并跳转到有效的对象,但是在对象类型之间切换时它使我的应用程序崩溃,因为似乎我无法"reinterpret_cast"来确定没有关系的类对象(没有子类,两个没有任何关系的独立类(。

问:有没有办法确定void*中位于哪种数据类型(event.GetClientData()返回void*(并正确转换它?

void SearchResultWindow::OnClickResult(wxCommandEvent& event) {
Item* item = reinterpret_cast<Item*>(event.GetClientData());
if (item) {
this->selectRelatedMapItem(item);
} else {
Creature* creature = reinterpret_cast<Creature*>(event.GetClientData());
if (creature) {
this->selectRelatedMapCreature(creature);
}
}
}

谢谢!

不,在C++中没有可移植的方法可以做到这一点。

一旦你强制转换为void*const void*你就会告诉编译器你将自己跟踪该类型。

此处的一种解决方案是拥有一个基类,所有对象都从该基类继承,并将void*强制转换为该类型。从那里,规则的多态性可以接管。

不要将对象本身添加为客户端数据void*,而是添加指向具有足够成员来查找对象的结构的指针。例如,包含对象的容器的某些标识符和容器中的索引。