2016-03-08 34 views
0

可以想象我有这样的类:如何理解父类的水平

class Base 
{ 
}; 

class D2: public Base 
{ 
} 

class D3: public D2 
{ 
}; 

class D4: public D3 
{ 
}; 

推移...

,我有基地类的指针列表。

假设我不知道这些类的继承顺序。我只能理解指针是否是给定类的实例。 (我不能手动检查,因为人们会在稍后注册这些类)

例子:

D3* d3 = new D3(); 
D2::isInstance(d3); //return true 
D4::isInstance(d3); //return false 

当我弹出基地类的指针,我想将它扔在最派生类。

主要问题: 有没有一种C++方法,我可以理解D3是否从D2继承或不?如果存在我可以解决的这种方法。

谢谢。

+1

看看[链接](http://en.cppreference.com/w/cpp/types/is_base_of) – Incomputable

+0

谢谢Olzhas。我认为这是答案 – ufukgun

+0

理想情况下,你不需要知道派生类是什么。所有基类都需要使用所需的所有方法,而不必诉诸于确定其类型。这不是最佳实践。 – Neil

回答

3

既然你没有检查特定的对象,你可以使用std::is_base_of,这是编译时间,因此是安全的。 link to reference

+0

感谢您的提示:-) – VolAnd

+0

@VolAnd,不客气:)我相信实现来自Andrei Alexandrescu。它在某个地方的YouTube上,它确实是编译时间,但我不记得它是哪个会议。 – Incomputable