2016-03-08 30 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