Требование этого указывает на то, что вы делаете это неправильно.Вы пытаетесь воспроизвести что-то, для чего были изобретены виртуальные методы.Просто поместите виртуальный метод в ваш базовый класс.
class AAA
{
public:
virtual void DoSomething() = 0;
}
class BBB : public AAA
{
public:
void DoSomething() { ... }
}
class CCC : public AAA
{
public:
void DoSomething() { ... }
}
class DDD : public AAA
{
public:
void DoSomething() { ... }
}
И в вашем коде вызова ваша логика проста:
// no need for if() blocks. it's the point of virtual methods.
AAA* somePointer;
...
somePointer->DoSomething();
Я понимаю, что вы, возможно, не можете просто скопировать / вставитьВаш текущий кодекс "чего-то" в это.Но это шаблон , который вы должны использовать для этого сценария.Возможно, вместо DoSomething
имеет больше смысла иметь что-то вроде GetSomeInfo
, которое вызывающий может использовать для выполнения всего, что ему нужно.Конкретное использование этого шаблона зависит от вашего контекста.