[英]Check which subclass an object is in C++?
鑒於存在以下結構類型:
struct A {};
struct B : A {};
struct C : A {};
struct D : B {};
我們有一段代碼:
A a = f();
你如何檢查結構實際是什么類型? 即是A
, B
, C
還是D
?
如果需要,我可以給出我試圖使用答案的上下文,但我不認為這是必要的。
請注意,C ++中的polimorphism僅適用於指針和引用,如果按值返回A,它將始終為A.如果函數f()返回類型B的類,則會發生切片 。
如果更改函數以返回指向A的指針,則可以使用動態強制轉換並檢查是否返回null。
A *a=f();
B *b=dynamic_cast<B*>(a);
if(b!=NULL)
{
//a was of type B
}
它是A
型。 為什么? 因為切片。
但是,如果f()
返回A&
,並且您使用了A& a = f();
相反,那么你有兩個選擇(都涉及RTTI):
您可以使用typeid(a)
並查看其name()
或與各種(子)類的type_info
對象進行比較。
您可以使用dynamic_cast
:例如,如果a
不是D
類型, dynamic_cast<D*>(&a)
將返回null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.