gpt4 book ai didi

c++ - 检查 2 个变量的动态类型的继承 - 但它们在范围内未声明

转载 作者:行者123 更新时间:2023-11-30 05:15:11 26 4
gpt4 key购买 nike

是否可以检查 2 个变量(例如 bc)的基础类型(例如 BC)之间的继承) 如果两者都没有在范围内声明?

我认为这是不可能的,但我不确定。

Test1.h:-

#include <vector>
class A{};
std::vector<A*> test1();

Test1.cpp:-

enter image description here

#include "Test1.h"
class B : public A{};
class C : public B{};
class D : public A{};
std::vector<A*> test1(){
A* b=new B(); A* c=new C(); A* d=new D();
std::vector<A*> re;
re.push_back(b); re.push_back(c); re.push_back(d);
return re;
}

测试2.cpp ;请注意,B C D 在这里(按设计)未知:-

#include "Test1.h"
int test2(){
std::vector<A*> v=test1();
A* b=v[0]; A* c=v[1]; A* d=v[2];
isInherit(b,c); //true
isInherit(c,d); //false
isInherit(b,d); //false
}

如果答案是肯定的,请展示如何编写 bool isInherit(A* base,A* derive){}

注意修改class A是不允许的。
(因此,不允许通过 hack 来设置 A 的非静态字段 = a value depending on type。)

我可能会在我的代码中使用它作为某种黑魔法。

最佳答案

有点。

需要virtual bool A::baseOf(A const* derived) const = 0bool B::baseOf(A const* derived) const override { return dynamic_cast<B*>(derived); }

现在您可以检查 foo->baseOf(bar)当你只有 A 的定义时。

如果C,事情确实会崩溃忘记覆盖 B::baseOf .

关于c++ - 检查 2 个变量的动态类型的继承 - 但它们在范围内未声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43209414/

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