Я пытаюсь использовать итераторы c ++ с интерфейсами, но мне не удается заставить его работать.
Я немного растерялся с тем, какой тип выбрать для векторного содержимого.Это должен быть указатель?я должен сделать «новую реализацию ()»?Короче говоря, мне неясно, и я не могу найти полезных примеров по этому поводу.
Вот интерфейсы и реализации (файл .h).
class Interface{
public:
virtual int method() = 0;
};
class Implementation1 : public Interface{
public:
int method();
};
class Implementation2 : public Interface{
public:
int method();
};
Файл .cpp:
#include "content.h"
int Implementation1::method(){
return 1;
}
int Implementation2::method(){
return 2;
}
И моя основная функция:
#include "content.h"
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
// create the vector and put elements in it
vector<Interface*> elements;
elements.push_back(new Implementation1());
elements.push_back(new Implementation1());
elements.push_back(new Implementation2());
// now iterate on them
vector<Interface*>::iterator iterator;
for(iterator = elements.begin(); iterator != elements.end(); ++iterator ){
*iterator->method();
}
return 1;
}
, который выводит компилятор:
main.cpp: In function 'intmain () ': main.cpp: 19: ошибка: запрос для элемента' method 'в' * iterator .__ gnu_cxx :: __ normal_iterator <_Iterator, _Container> :: operator-> с _Iterator = Interface **, _Container = std ::vector> ', который не имеет типа' Interface * '
Есть идеи о том, что я здесь делаю неправильно?