C++で基底クラスA
へのポインタを持っていれば、ポインタが派生クラスB
またはC
にあることをコードでどのように伝えることができますか?オブジェクトの種類を確認する
0
A
答えて
6
基本クラスA
が多型である(つまり少なくとも1つの仮想関数を持つ)と仮定すると、dynamic_cast
を使用できます。与えられたA* ap;
:
if (B* bp = dynamic_cast<B*>(ap)) {
// the object is a B
}
else if (C* cp = dynamic_cast<C*>(ap)) {
// the object is a C
}
1
別のアプローチ、
if (typeid(*pBase) == typeid(A))
{
cout << "A" << endl;
}
else if (typeid(*pBase) == typeid(B))
{
cout << "B" << endl;
}
else if (typeid(*pBase) == typeid(C))
{
cout << "C" << endl;
}
else
{
cout << "something else" <<endl;
}
しかし、私は、ジェームズのアプローチを好むあなただけタイプ、を決定するものではありませんが、あなたはまた、タイプ - を持っていることを使用しているためその後、で動作するキャストされたインスタンス!
2
あなたが一般的に知っている必要はありません。
struct A {
virtual int generate_foo() = 0;
};
struct B : A {
int generate_foo() { return 42; }
};
struct C : A {
i_;
C(int i) : i_(i) { }
int generate_foo() { return i_++; }
};
あなたはA*
を持っている場合は、(1)それはgenerate_foo()
メソッドを持っていることを知っているし、(2)generate_foo()
がために適切なFOOを生成することを知っていますあなたが本当に持っているものは何でも。一般的には十分である必要があります。はの場合、に追いつくことができます。
哲学的には、C++の設計者は、実行時の型情報の追加を避けるために何年も費やしてきました。しかし、彼らは最終的に彼らが失われた戦いの間違った終わりにいたことを決め、dynamic_cast
とtypeinfo()
を追加しました。 C++ 0xはもっと多くを追加します。
関連する問題
- 1. コンテナの種類を確認する
- 2. パイソン、円形インポート後のオブジェクトの種類を確認
- 3. Sitecoreのリンクの種類を確認
- 4. matlabのベクトルの種類を確認する
- 5. プロジェクトのコアデータ永続ストアの種類を確認する
- 6. iPadでinputAvailableの種類を確認する方法は?
- 7. 画像ファイルの種類を確認する
- 8. フィールドの種類を確認する方法Any? is Null o NSNull
- 9. Telegram bot api C#でテレグラムメッセージの種類を確認するには?
- 10. Outlook - 電子メールアドレスの種類を確認する
- 11. Windows Mobileデバイスの種類を確認する方法は?
- 12. アップロード後にファイルの種類を確認する
- 13. VBAでデバイスの種類を確認する
- 14. NSPredicateはオブジェクトクラスの種類を確認します
- 15. 画像の種類と圧縮を確認せずにMagick
- 16. 2種類の比較が可能かどうかの確認
- 17. オブジェクトキーの値の種類を確認する最速の方法(JavaScript)
- 18. オブジェクトの種類を確認するにはどうすればいいですか?
- 19. NSDataで変換されたメディアの種類を確認するには
- 20. uwpでユーザが選択したファイルの種類を確認する
- 21. Emberのリトリーブレコードオブジェクトの種類を認識
- 22. 返品の方法特定の種類のものを確認しますか?
- 23. Visual Studioに登録されている分類の種類を確認するには
- 24. 紺碧の認証の種類は?
- 25. オブジェクトの種類の定義方法
- 26. 種類は、「種類」タイプとのトラブルを有するタイプのラムダ
- 27. (.net)デザインの種類の種類
- 28. Enumの種類Enumの種類
- 29. 質問オブジェクトの種類について
- 30. Retrofitを使用してデータの種類を確認してください
これはあなたが望むものですか? http://stackoverflow.com/questions/351845/finding-the-type-of-an-object-in-c – dheerosaur