В функцию передаётся итератор и количество байт, которое необходимо скопировать в динамический массив к которому есть доступ через unique_ptr. Как мне правильно произвести вызов std::copy и std::memcpy в этом случае?
void Foo(std::iterator<std::input_iterator_tag, uint8_t> iter, int32_t length) {
unique_ptr<char[]> container = make_unique<char[]>(100);
std::copy (iter, iter + length, container); // Как скопировать содержимое iter в container
std::memcpy (container, iter , length); // Как скопировать содержимое iter в container
for (int i = 0; i < length; i++) cout << container[i];
};
Ответ для такого кода - никак.
Дело в том, что std::iterator - просто предоставляет псевдонимы iterator_category, value_type, difference_type, pointer, reference, причем обязательно передать только первые два параметра для определения iterator_category и value_type, остальные псевдонимы для типов будут сделаны на их основе, конечно, если Вам они подойдут. std::iterator не предоставляет никакого функционала, т.е. ни operator*, ни operator++, и т.д. у него нет, поэтому использовать его так, как Вы хотите не получится.
Его можно использовать, например, для реализации своего итератора:
class MyIterator:
public std::iterator<std::input_iterator_tag, MyType>
//Наследуемся от std::iterator с нужными аргументами,
//чтобы псевдонимы сами сгенерировались.
Стоит заметить, что std::iterator, начиная с C++17 является устаревшим.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости