我正在使用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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
没有在C++中没有可移植的方法.
一旦你转向void*或const void*你告诉编译器你将自己跟踪类型.
这里的一个解决方案是拥有一个基类,所有对象都从该基类继承,并void*转换为该类型.从那里,定期多态可以接管.