是否可以检查2个变量(例如B
和C
)的基础类型(例如b
和c
)之间的继承(如果两者都未在范围?
我认为这是不可能的,但我不确定。
Test1.h: -
#include <vector>
class A{};
std::vector<A*> test1();
Test1.cpp: -
#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;
}
Test2.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
(因此,不允许设置non-static field of A
= a value depending on type
的黑客。)
我可以在我的代码中使用它作为某种黑魔法。
答案 0 :(得分:1)
排序。
需要virtual bool A::baseOf(A const* derived) const = 0
和bool B::baseOf(A const* derived) const override { return dynamic_cast<B*>(derived); }
现在,您可以检查foo->baseOf(bar)
当您拥有的是A的定义时。
如果C
忘记覆盖B::baseOf
,事情就会崩溃。