Ich habe Hierarchie der Klassen:Was ist der beste Weg, um den Typ des Absenderobjekts zu kennen?
class A
{
};
class B : public A
{
};
class C : public B
{
};
class D : public A
{
};
und ich habe eine Funktion, die Benachrichtigung ausführt:
void notify(A* sender, const NotificationType notification)
{
}
Mein Problem ist, wie genaue Art des Senderobjekts zu erfahren. Ich möchte einen eleganten Weg finden, dieses Problem zu lösen. Ich mag es nicht, Dynamic Cast für diese Zwecke zu verwenden. Art und Weise ist, wie Enum innerhalb der Klasse A zu definieren:
enum ClassType
{
CLASS_A,
CLASS_B,
CLASS_C,
CLASS_D
};
und definieren virtuelle Methode:
virtual ClassType get_type(void) const;
Aber dieser Ansatz hat schlechte Skalierbarkeit. Eine weitere Möglichkeit, diese Informationen in NotificationType beizubehalten, weist jedoch auch eine schlechte Skalierbarkeit auf.
P.S. Ich möchte nur einen ähnlichen Code verwenden:
ich ähnlichen Code verwenden möchten:
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();
}
"Wie finde ich den genauen Typ des Absenderobjekts?" Wenn Sie es wissen müssen, machen Sie es falsch. –
Können Sie erklären, warum Sie den konkreten Typ des Absenders kennen müssen? – hansmaad
Es scheint eigenartig, dass Sie die Anwendung so gestalten, dass sie polymorph wirkt und Sie dann den konkreten Typ kennen müssen. –