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 に答える