は、私はクラスの階層があります送信者オブジェクトの種類を知る最も良い方法は何ですか?
class A
{
};
class B : public A
{
};
class C : public B
{
};
class D : public A
{
};
を、私は通知を行い、いくつかの機能を、持っている:
void notify(A* sender, const NotificationType notification)
{
}
を私の問題は、送信者のオブジェクトの正確な型を見つける方法です。私はこの問題を解決するエレガントな方法を探したい。私はこれらの目的のためにダイナミックキャストを使用するのは嫌です。
enum ClassType
{
CLASS_A,
CLASS_B,
CLASS_C,
CLASS_D
};
と仮想メソッドを定義:
virtual ClassType get_type(void) const;
しかし、このアプローチは悪い拡張性を持っている可能性のある方法は次のようにクラス内で列挙型を定義することです。この情報をNotificationTypeに保持する別の方法ですが、スケーラビリティも悪いです。
P.S.
私は、同様のコードを使用したい:あなたはあなたの階層を永続化するタイプを知っているしたい場合
void notify(A* sender, const NotificationType notification)
{
if (sender is object of A)
new GuiA();
else if (sender is object of B)
new GuiB();
else if (sender is object of C)
new GuiC();
else
new GuiD();
}
「送信者オブジェクトの正確な種類を調べる方法」知っておく必要がある場合は、間違っていると思います。 –
「送信者」の具体的な種類を知る必要がある理由を説明できますか? – hansmaad
多態的に行動するようにアプリケーションを設計し、具体的な型を知る必要性を感じるのは独特のようです。 –