Итераторы и шаблоны

Я пытаюсь реализовать функцию, которая позволяет пользователю вводить некоторый тип начального и конечного итераторов, а затем все они выполняют некоторые операции с данными. Однако функция должна быть достаточно общей, она должна работать для многих типов итераторов (например, std :: vector :: iterator , std :: string :: iterator , ] std :: iterator и т. д.). Единственным ограничением является то, что итераторы должны иметь как минимум forward_iterator_tag возможности.

Мой прототип функции выглядит так:

template <class key_type, class data_type> std::shared_ptr<data_type> 
    remove(std::iterator<std::forward_iterator_tag, key_type> key_start, 
    std::iterator<std::forward_iterator_tag, key_type> key_end);

Однако это ограничивает меня использованием итератора forward_iterator_tag , поэтому попытка вызвать функцию, подобную этой:

remove<char, char>(std::iterator<std::random_access_iterator_tag, char>(), std::iterator<std::random_access_iterator_tag, char());

, не удастся, потому что компилятор не может преобразовать std :: iterator в std :: iterator . Кроме того, этот метод не работает для строковых итераторов, векторных итераторов или других итераторов stl.

Кто-нибудь знает, как stl реализует контейнеры / строки для приема итераторов друг от друга? Например, это правильно компилируется:

std::string a = "hello";
std::vector<char> v(a.begin(), a.end());
6
задан helloworld922 22 February 2011 в 07:40
поделиться