Как работать с производным интерфейсом?
От: Максим Рогожин Россия  
Дата: 27.05.18 11:09
Оценка:
Привет!

Хочу написать приложение, в котором все основные сущности будут представлены своими интерфейсами. Конкретные реализации будут создаваться в фабриках.

Например, имеется иерархия интерфейсов:
class IElement {
public:
   int getId() const =0; // общий метод
   virtual ~IElement() {};
};

class IFoo : public IElement {
public:
   int getSize() const =0; // специфический для IFoo метод
   virtual ~IFoo() {};
};

class IBar : public IElement {
public:
   bool isValid() const =0;  // специфический для IBar метод
   virtual ~IBar() {};
};


Допустим есть коллекция:
std::vector<IElement> coll;


и надо обработать каждый элемент. Как это сделать? С помощью паттерна Визитор?
class ConcreteFoo : public IFoo {
public:
  void accept(Visitor &v) override {
    v.visit(*this);
  }
};

Но тип *this будет ConcreteFoo, а надо IFoo, так как все должно работать через интерфейсы, а не через конкретные типы. Подскажите, пожалуйста.
Отредактировано 27.05.2018 11:15 Максим Рогожин . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.