Namespaces
Variants

std::experimental::ranges:: tagged

From cppreference.net
Определено в заголовочном файле <experimental/ranges/utility>
template < class Base, TagSpecifier ... Tags >

requires sizeof... ( Tags ) <= std:: tuple_size < Base > :: value

struct tagged ;
(ranges TS)

Шаблон класса tagged расширяет кортежеподобный тип класса Base , от которого он публично наследуется, набором именованных методов доступа, заданных спецификаторами тегов Tags... . Теги применяются последовательно: i-й спецификатор тега в Tags... соответствует i-му элементу кортежа.

Спецификаторы тегов в Tags... должны быть уникальными. В противном случае поведение не определено.

Невозможно удалить экземпляр tagged через указатель на любой базовый класс, кроме Base .

Содержание

Функции-члены

создает объект tagged
(публичная функция-член)
присваивает объект tagged
(публичная функция-член)
обменивает содержимое двух объектов tagged
(публичная функция-член)

Акцессоры именованных элементов

Для N -го спецификатора тега в Tags... , чье соответствующее имя элемента - name , tagged предоставляет методы доступа с именем name следующим образом:

constexpr decltype(auto) name() &       { return std::get<N>(*this); }
constexpr decltype(auto) name() const & { return std::get<N>(*this); }
constexpr decltype(auto) name() &&      { return std::get<N>(std::move(*this)); }

Функции, не являющиеся членами класса

специализирует swap для tagged объектов
(функция)

Доступ по типу кортежа

получает размер tagged
(специализация шаблона класса)
получает типы элементов tagged
(специализация шаблона класса)

Смотрите также

указывает, что тип является спецификатором тега
(концепт)
псевдоним шаблона для помеченного std::pair
(псевдоним шаблона)
удобная функция для создания tagged_pair
(шаблон функции)
псевдоним шаблона для помеченного std::tuple
(псевдоним шаблона)
удобная функция для создания tagged_tuple
(шаблон функции)
спецификаторы тегов для использования с ranges::tagged
(класс)