未申报是否有可能检查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;
}
测试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
是不允许的。
(因此,黑客设置non-static field of A
= a value depending on type
是不允许的。)
我可以用它作为我的代码里面的一些种类的黑魔法。
我不明白你的类型是不完整的。在你的例子中,你的类型是被定义的。如果你转发声明你的类型,那么你不能指定任何继承。 –
@FrançoisAndrieux在'Test2.cpp':'B'' C'' D'不完整。 (错误?) – javaLover
[不完整的类](http://en.cppreference.com/w/cpp/language/type#Incomplete_type)在C++中有特定的含义。它表示已声明但未定义的类。在'Test2.cpp'中没有声明'B','C'或'D'。 –