Привет!
Хочу написать приложение, в котором все основные сущности будут представлены своими интерфейсами. Конкретные реализации будут создаваться в фабриках.
Например, имеется иерархия интерфейсов:
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, так как все должно работать через интерфейсы, а не через конкретные типы. Подскажите, пожалуйста.