gpt4 book ai didi

C++ 转换和 typeid

转载 作者:行者123 更新时间:2023-11-28 03:12:26 27 4
gpt4 key购买 nike

我得到一个有两个基类指针的函数,根据子类,应该调用其他函数......

像这样:

    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 是“树”,则改为执行此操作!

最佳答案

A 中有一些默认情况下什么都不做并被它的一些继承类覆盖的虚方法不是更好吗?

class A {
public:
virtual void method(A *a2) {
}

virtual void otherMethod() {
}
};

class B : public A {
public:
virtual void method(A *a2) {
a2->otherMethod();
}
};

class C : public B {
public:
virtual void otherMethod() {
// do your C stuff here
}
};

class D : public A {
public:
virtual void otherMethod() {
// do your D stuff here
}
};

这会实现您想要做的事情吗?

关于C++ 转换和 typeid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18065856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com