验证基础对象是特定的派生类型

时间:2012-05-22 15:57:18

标签: c++ rtti

我有一个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中执行此操作?怎么样?

2 个答案:

答案 0 :(得分:1)

您可以使用dynamic_cast尝试将其强制转换为基类/派生类型。如果它不返回NULL,那么它是一个基类或从该类型派生(取决于你是否构建了层次结构或向下)

答案 1 :(得分:0)

您可以使用 typeinfo 来获取对象的类型 或者您可以使用 dynamic_cast 来检查指针是否指向适当类型的对象。