У меня есть иерархия классов:Каков наилучший способ узнать тип объекта отправителя?
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();
}
«как узнать точный тип объекта отправителя». Если вам нужно знать, вы делаете это неправильно. –
Можете ли вы объяснить, почему вам нужно знать конкретный тип 'sender'? – hansmaad
Кажется странным, что вы разрабатываете приложение для работы полиморфно, а затем чувствуете необходимость знать конкретный тип. –