2012-05-22 50 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

相关问题