1

假设我有一个基类对象的向量,但使用它来包含许多派生类。我想检查该向量的成员是否属于特定类。我怎么做?我可以考虑制作一个接受基类参数的派生类模板,但我不确定如何将类与对象进行比较。

4

3 回答 3

2

如果您的基类有一些虚拟成员(即它是多态的,我认为在这种情况下应该是这样),您可以尝试向下转换每个成员以找出它的类型(即使用dynamic_cast)。

否则,您可以使用RTTI(即typeid)。

于 2012-10-01T17:05:30.733 回答
0

您可以使用dynamic_cast

但是,如果您需要这样做,那么您可能遇到了设计问题。你应该使用多态性或模板来解决这个问题。

于 2012-10-01T17:00:26.550 回答
0

看看这个例子:

#include <iostream>
using namespace std;

#include <typeinfo>

class A
{
public:
    virtual ~A()
    {
    }
};

class B : public A
{
public:
    virtual ~B()
    {
    }
};

void main()
{
    A *a = new A();
    B *b = new B();

    if (typeid(a) == typeid(b))
    {
        cout << "a type equals to b type\n";
    }
    else
    {
        cout << "a type is not equals to b type\n";
    }

    if (dynamic_cast<A *>(b) != NULL)
    {
        cout << "b is instance of A\n";
    }
    else
    {
        cout << "b is not instance of A\n";
    }

    if (dynamic_cast<B *>(a) != NULL)
    {
        cout << "a is instance of B\n";
    }
    else
    {
        cout << "a is not instance of B\n";
    }

    a = new B();

    if (typeid(a) == typeid(b))
    {
        cout << "a type equals to b type\n";
    }
    else
    {
        cout << "a type is not equals to b type\n";
    }

    if (dynamic_cast<B *>(a) != NULL)
    {
        cout << "a is instance of B\n";
    }
    else
    {
        cout << "a is not instance of B\n";
    }
}
于 2012-10-01T17:31:12.193 回答