我有一个有两个基类指针的函数,根据子类,应该调用其他函数......
像这样:
void function(A* a, A* a2){
if (typeid(*a).name() == "B"){
if(typeid(*a2).name() == "C"){
otherFunction();
}
if(typeid(*a2).name() == "D"){
otherFunction2();
}
}
}
但是,有一大堆问题:
1)我读过 typeid.name 会根据编译器产生不同的结果,因此我不想使用它。
2)我考虑过创建一个“B”的实例而不是编写if(typeid(*a2) == typeid(instanceOfB))
,但这将是很多工作,因为有很多构造函数参数......
3)我也考虑过使用 dynamic_cast 但一些子类看起来像这样:
A <-- B <-- C
因此,如果我想通过动态转换检查参数是否为 B,即使参数实际上是 C,它也会通过,因为 C 继承自 B
编辑:看来我必须重新考虑设计,但由于许多人表示设计存在缺陷,我将快速解释我的思路:
有一扇窗户。几个不同的对象位于窗口内并四处移动,一个游戏。该功能应该用作碰撞检测。像这样:遍历屏幕上的所有对象,检查是否发生碰撞。将两个碰撞的对象作为参数并调用此函数。此函数查找不同的碰撞,例如“如果 a 是“箭头”而 a2 是“强盗”,则执行一些操作,但如果 a2 是“树”,则改为执行此操作!