C++ 从两类中确定无效类型*
C++ Determine type of void* from two classes
我正在使用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*
,而是添加指向具有足够成员来查找对象的结构的指针。例如,包含对象的容器的某些标识符和容器中的索引。
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 如何解决一元"*"(有"字符")错误的无效类型参数?
- "错误:数组下标的无效类型'float [10001][float]'是什么意思?
- C++ 从两类中确定无效类型*
- 数组下标编译的无效类型'int[int]'由于 -Wfatal 错误而终止
- 数组下标的无效类型INT [INT]
- 此背包代码显示浮点[float]无效类型错误.可能是什么原因
- 我收到"无效类型 int[int]...",但这毫无意义
- 数组下标的无效类型"<未解析的重载函数类型>[int]" - C++
- 一元*的类型冲突error和无效类型参数具有int
- 映射迭代器:一元'*'的无效类型参数(具有"int")
- 一元 '*' 的 #define 和无效类型参数(具有 'double')
- 使用矢量的数组下标'int[int]'无效类型
- 数组相关错误 - 无效类型.
- 未知语法无效(类型::m_function)()
- 如何修复"'一元*'的无效类型参数?
- 高斯-赛德尔函数中的无效类型
- 数组下标和其他无效类型"int[int]"
- 我面临这个:我的程序中数组下标的无效类型"double[int]"