基本クラスのオブジェクトのベクトルがありますが、それを使用していくつかの派生クラスを含めるとします。そのベクトルのメンバーが特定のクラスに属しているかどうかを確認したいと思います。それ、どうやったら出来るの?基本クラスのパラメーターを取り入れた派生クラスのテンプレートを作成することは考えられますが、クラスとオブジェクトをどのように比較できるかわかりません。
質問する
128 次
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 に答える