Spec-Zone.ru › C++

std::ranges::elements_of

Определён в заголовочном файле <ranges>
template< ranges::range R, class Allocator = std::allocator<std::byte> >
struct elements_of;
(начиная с C++23)

Инкапсулирует range. Специализации elements_of выступают в качестве тега в наборах перегрузок, позволяя однозначно определить, следует ли трактовать диапазон как последовательность, а не как отдельное значение.

Параметры шаблона

R - тип, удовлетворяющий требованиям range
Allocator - тип аллокатора, отвечающий требованиям Allocator

Поля данных

Поле Описание
[[no_unique_address]] R range
диапазон
(публичный нестатический член-объект)
[[no_unique_address]] Allocator allocator
аллокатор. Имеет инициализатор члена по умолчанию, который выполняет инициализацию значением
(публичный нестатический член-объект)

Руководство по выводу аргументов шаблона

template< class R, class Allocator = std::allocator<std::byte> >
elements_of( R&&, Allocator = Allocator() ) -> elements_of<R&&, Allocator>;
(начиная с C++23)

Пример

#include <any>
#include <generator>
#include <iostream>
#include <ranges>
#include <string_view>

template<bool Elementwise>
std::generator<std::any> gen(std::ranges::input_range auto&& r)
{
    if constexpr (Elementwise)
        co_yield std::ranges::elements_of(r); // yield each element of r
    else
        co_yield r;                           // yield r as a single value
}

int main()
{
    auto test = std::string_view{"test"};

    for (std::any a : gen<true>(test))
        std::cout << '[' << std::any_cast<char>(a) << "] ";
    std::cout << '\n';

    for (std::any a : gen<false>(test))
        std::cout << '[' << std::any_cast<std::string_view>(a) << "] ";
    std::cout << '\n';
}

Вывод:

[t] [e] [s] [t] 
[test]

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2024):
    • 26.5.6 Шаблон класса elements_of [range.elementsof]

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/elements_of

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API