Как получить тип значения из выходного итератора?C++

Программы на C++. Форум разработчиков
Anonymous
Как получить тип значения из выходного итератора?

Сообщение Anonymous »

Допустим, у меня есть контейнер C (например, MyContainer ) с содержащими объектами, хранящимися как void* указатели. Единственный способ итерации через элементы этого контейнера - через две функции интерфейса: < /p>


[*]

Код: Выделить всё

getFirstElem(MyContainer const&, void*)
: выводит первый элемент контейнера.

Код: Выделить всё

getNextElem(MyContainer const&, void*)< /code>: выводит следующий элемент контейнера. < /li>
< /ol>

Я хочу кодировать общую функцию, которая проходит через элементы этого контейнера C через функции интерфейса, упомянутые выше, и скопировать их значения в контейнер C ++ (например, Std :: Vector < /code>). далеко: < /p>

template
void
copy_container(MyContainer const &cont, OutputIterator first) {
typename std::iterator_traits::value_type elem;
if(getFirstElem(cont, &elem)) {
do {
*first = elem;
++first;
} while(getNextElem(cont, &elem))
}
}
< /code>

Приведенный выше пример работает нормально с нормальными итераторами. Тем не менее, он не может компилировать с выходными итераторами (например, copy_container (cont, std :: Back_inserter (myVector)); 
).

Причина в том, что STD :: iterator_traits :: value_type результаты в void в случае аргумента Arare is it ityer. />
есть ли способ заставить эту общую функцию работать и для выходных итераторов? v4.4.7).

Подробнее здесь: https://stackoverflow.com/questions/251 ... t-iterator

Вернуться в «C++»