Почему STD :: Contigaging_iterator требует, чтобы тип значения был ссылкой?C++

Программы на C++. Форум разработчиков
Anonymous
Почему STD :: Contigaging_iterator требует, чтобы тип значения был ссылкой?

Сообщение Anonymous »

Из CppReference: < /p>

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

template< class I >
concept contiguous_iterator =
std::random_access_iterator &&
std::derived_from &&
std::is_lvalue_reference_v &&
std::same_as &&
requires(const I& i) {
{ std::to_address(i) } ->
std::same_as;
};
< /code>
У меня есть контейнер, который концептуально похож на вектор байтов (на самом деле это тензор факела), и я хочу предоставить способ итерации по смежным пролетам с фиксированной длиной (также фактически тензоры факела, полученные путем индексации 0'-а-то измерение). Данные сохраняются смежно, и каждый элемент действительно является промежутком, который указывает на фиксированную часть данных контейнера, поэтому я подумал, что смогу реализовать std :: contigage_iterator 
. Но я не уверен, что поместить для приведенных ниже двух типов: < /p>

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

class Container : std::vector {
public:
Container(std::vector data, std::size_t chunk_size);

class Iterator {
public:
using difference_type = std::ptrdiff_t;
using value_type = std::span; // A span of length _chunk_size
using pointer = ?;
using reference = ?;
using iterator_concept = std::random_access_iterator_tag;
};

std::size_t _chunk_size;
};
Идеально указатель и ссылка оба будут std :: span в этом упрощенном примере, но это приводит к выходу из строя последних 3 пунктов смежного концепции итератора. Это сработало бы, если бы размер чанка был известен во время компиляции, и мы позволяем value_type = std :: array и pointer = std :: add_pointer_t и ссылка = std :: add_trece_t

Подробнее здесь: https://stackoverflow.com/questions/796 ... -reference

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