вот сегодняшняя дилемма:C++ шаблонный контейнер сканер
Я полагаю
class A{
public:
virtual void doit() = 0;
}
затем различные подклассы, все реализации их хороший метод Doit. Теперь предположим, что я хочу написать функцию, которая принимает два итератора (один в начале последовательности, другой в конце). Последовательность представляет собой последовательность подклассов A, например, list<A*>
или вектора ... Функция должна вызывать все методы doit при сканировании итераторов ... Как это сделать? Я подумал:
template<typename Iterator> void doList(Iterator &begin, Iterator &end) {
for (; begin != end; begin++) {
A *elem = (serializable*) *begin;
elem.doIt();
}
}
но дает странные ошибки ... у вас есть лучшие идеи или конкретная информация? Можно ли использовать list<A>
вместо list<A*>
?
Не могли бы вы привести несколько примеров странных ошибок, которые вы получаете? –
Nit: Вы уверены, что хотите передать итераторы по ссылке? – dirkgently
Да, конечно, вы можете использовать 'list ', но тогда нам нужно будет увидеть, что фактический вызов лучше предложить. – dirkgently