# std::experimental::ranges::tagged

< cpp‎ | experimental‎ | ranges

定义于头文件 `<experimental/ranges/utility>` |  |
template< class Base, ranges::TagSpecifier... Tags > requires sizeof...(Tags) <= std::tuple_size<Base>::value struct tagged; |  | (范围 TS)

类模板 `tagged` 将标签指定符 `Tags...` 所指定的具名访问器集合增设到其所公开派生的仿 tuple 类 `Base` 。按顺序应用标签： `Tags...` 中第 i 个标签指定符对应 tuple 的第 i 个元素。

`Tags...` 中的标签指定符应当是独一无二的。否则行为未定义。

不可能通过指向异于 `Base` 的任何基类的指针删除 `tagged` 的实例。

### 成员函数

(构造函数) | 构造 `tagged` 对象 (公开成员函数)
operator= | 赋值 `tagged` 对象 (公开成员函数)
swap | 交换二个 `tagged` 对象的内容 (公开成员函数)

#### 具名元素访问器

对于 `Tags...` 中对应元素名为 name 的第 N 个标签指定符， `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)); }

### 非成员函数

ranges::swap(ranges::tagged) | 为 `tagged` 对象特化 `swap` (函数)

### 仿 tuple 访问

std::tuple_size<std::experimental::ranges::tagged> | 获得 `tagged` 的大小 (类模板特化)
std::tuple_element<std::experimental::ranges::tagged> | 获得 `tagged` 的元素的类型 (类模板特化)

### 参阅

TagSpecifier | 指定类型为标签说明符 (概念)
tagged_pair | 有标签 std::pair 的别名模版 (别名模板)
make_tagged_pair | 用于创建 `tagged_pair` 的便利函数 (函数模板)
tagged_tuple | 有标签 std::tuple 的别名模版 (别名模板)
make_tagged_tuple | 用于创建 `tagged_tuple` 的便利函数 (函数模板)
in in1 in2 out out1 out2 fun min max begin end | 用于 ranges::tagged 的标签说明符 (类)