Как получить тип значения из выходного итератора?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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