Как написать функцию C ++, которая может возвращать итератор, или reverse_iterator

Насколько я могу судить, в 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 и, кажется, работает ...

5
задан Community 23 May 2017 в 11:47
поделиться