2012-05-22 53 views
0

我有一個Visual Studio 2008 C++ 03項目,我想驗證對象是否屬於某種類型。驗證基礎對象是一個特定派生類型

例如:

int main() 
{ 
    struct A { virtual ~A() { }; }; 
    struct B : public A { }; 
    struct C : public A { }; 

    A* b = new B(); 
    A* c = new C(); 

    assert(typeof(b) == typeof(B)); 
    assert(typeof(b) != typeof(C)); 

    assert(typeof(c) == typeof(C)); 
    assert(typeof(c) != typeof(B)); 

    assert(typeof(b) != typeof(c)); 
    return 0; 
} 

有沒有辦法做到這一點在C++ 03?怎麼樣?

回答

0

您可以使用typeinfo用於獲取對象的類型。
或者您可以使用dynamic_cast來檢查指針是否指向適當類型的對象。

+0

'assert(typeid(* b)== typeid(B))'似乎工作。謝謝! – PaulH

1

您可以使用dynamic_cast嘗試將其轉換爲基本/派生類型。如果它不返回NULL,那麼它是一個基類或從該類型派生的(取決於如果你投了層次或向下)

+0

assert(NULL!= dynamic_cast < B* >(b));'是。那也可以。謝謝! – PaulH

相關問題