//много простых интерфейсов, как завещали отцы
class IInterface;
class IAlpha : public IInterface;
class IBeta : public IInterface;
class IGamma : public IInterface;
class IDelta : public IInterface;
// имплементаторы разных комбинаций простых интерфейсов
class AB : IAlpha, IBeta{};
class ABG : IAlpha, IBeta, IGamma{};
class BGD : IBeta, IGamma, IDelta{};
class AD : IAlpha, IDelta{};
//теперь нам нужен класс который будет понимать любые входные комбинации
class Worker
{
// указываем явно что нам нужно, но из такой сигнатуры создается впечатление что параметры это разные объекты, что не прикольно
Do0(IAlpha, IBeta);
Do1(IAlpha, IBeta, IGamma);
Do2(IBeta, IGamma, IDelta);
Do3(IGamma, IDelta);
};
class Worker
{
// передаем один объект, но не ясно что он должен имплементить, тоже хренова
Do0(IInterface i)
{
auto a = dynamic_cast<IAlpha *>(i);
auto a = dynamic_cast<IBeta *>(i);
}
Do1(IInterface);
Do2(IInterface);
Do3(IInterface)
{
auto g = dynamic_cast<IGamma *>(i);
auto d = dynamic_cast<IDelta *>(i);
}
};
// такое тоже не хочется делать, создавать интерфейс ради одного класса которые использует такию комбинацию
class IAlphaBeta : IAlpha, IBeta{};
class Worker
{
Do0(IAlphaBeta i){}
};
всё — некрасиво
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.