Насколько я могу судить, в C ++ нет общего базового класса, который бы охватывал итератор, и reverse_iterator.
Единственное предложение, которое я видел до сих пор, - это обойти это с помощью шаблонов ( Как написать функцию, которая принимает итератор или коллекцию обычным способом? )
Однако это решение, похоже, не работает для меня.
class MyClass
{
template Iter* generate_iterator(...params...)
{
//returns either a vector::iterator or vector::reverse_iterator
}
template 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 должен возвращать указатель - теперь исправлено
update : только начал использовать это http://thbecker.net/free_software_utilities/ type_erasure_for_cpp_iterators / start_page.html и, кажется, работает ...