10

重複の可能性:
C++ でのオブジェクトの型の検索

ポインターをチェックして、特定の派生クラスに準拠しているかどうかを確認し、必要なアクションを実行することについて質問があります。

現在、2 つの派生クラスDerivedClass1DerivedClass2基本クラスがあるとしBaseClassます。以下の動作を確認したい。

Ptr<BaseClass> ptr;

if (ptr points to DerivedClass1) { アクション 1 でなければ } アクション { 2 }

特定の DerivedClass への ptr ポイントを確認するにはどうすればよいですか?

4

3 に答える 3

22

もう少しオブジェクト指向的に考えると、基本クラスの仮想メソッドにするだけです。

Ptr<BaseClass> ptr;

ptr->Action();

必要に応じて各クラスに実装させます。これは実際の答えではないことは承知していますが、目標を達成するための別の方法であり、より良いと見なされることが多いため、言及する価値があると思います.

于 2012-08-14T11:17:13.343 に答える
15

BaseClassポリモーフィック (仮想関数を含む) の場合、以下をテストできます。

if (dynamic_cast<DerivedClass1*>(ptr.get()))

しかし、通常、この種のことについては、アンワインドが示唆するように、おそらくビジター パターンの動的ディスパッチを使用する必要があります。コードを散らかすと、dynamic_cast保守が難しくなります。私はdynamic_castほとんど決して使用しません。

于 2012-08-14T11:17:48.700 に答える
7
if(dynamic_cast<DerivedClass1*>(ptr))
{
  // Points to DerivedClass1
}
else if(dynamic_cast<DerivedClass2*>(ptr)
{
  // Points to DerivedClass2
}
于 2012-08-14T11:17:31.053 に答える