Насколько я могу судить, в c ++ нет общего базового класса, который бы охватывал итераторы и reverse_iterator.
Единственное предложение, которое я видел до сих пор, - это обойти это с помощью шаблонов (
Как написать функцию, которая использует итератор или коллекцию в общем виде? )
Однако, похоже, это решение не работает для меня.
class MyClass
{
template<typename Iter> Iter* generate_iterator(...params...)
{
//returns either a vector::iterator or vector::reverse_iterator
}
template<typename Iter> void do_stuff(Iter *begin, Iter *end)
{
//does stuff between elements specified by begin and end
//I would like this function to remain agnostic of which direction it is working in!
}
void caller()
{
//I would like this function to remain agnostic of which direction it is working in too...
do_stuff(generate_iterator(blah),generate_iterator(foo));
}
};
В этом случае generate_iterator () не может использоваться по желанию, потому что компилятор жалуется, что «generate_iterator не является членом класса MyClass», вероятно, потому что я не указал его (что на практике я не могу, так как вызывающий должен быть независимым типа итератор).
Кто-нибудь может помочь? Заранее спасибо!
edit : как отметил Марк B, generate_iterator должен вернуть указатель - теперь исправлено
обновление : только что начал использовать это http://thbecker.net/free_software_utilities/type_erasure_for_cpp_iterators/start_page.html и похоже, что оно работает ...