MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
variant< Types > 模板结构体 参考

变体类型主模板 更多...

#include <variant.hpp>

类 variant< Types > 继承关系图:
[图例]

Public 成员函数

MSTL_CONSTEXPR20 variant () noexcept(is_nothrow_default_constructible_v< variant_alternative_t< variant, 0 > >)
 默认构造函数
template<typename T, enable_if_t< disjunction_v< is_same< T, Types >... >, int > = 0>
MSTL_CONSTEXPR20 variant (T &&value) noexcept(is_nothrow_move_constructible_v< T >)
 从特定类型值构造
MSTL_CONSTEXPR20 variant (const variant &x)
 拷贝构造函数
MSTL_CONSTEXPR20 variantoperator= (const variant &x)
 拷贝赋值运算符
MSTL_CONSTEXPR20 variant (variant &&x) noexcept
 移动构造函数
MSTL_CONSTEXPR20 variantoperator= (variant &&x) noexcept
 移动赋值运算符
template<size_t Idx, typename... Args, enable_if_t< is_constructible_v< variant_alternative_t< variant, Idx >, Args... >, int > = 0>
MSTL_CONSTEXPR20 variant (inplace_construct_tag, Args &&... args) noexcept(is_nothrow_constructible_v< variant_alternative_t< variant, Idx >, Args... >)
 参数列表原地构造函数
template<size_t Idx, typename U, typename... Args, enable_if_t< is_constructible_v< variant_alternative_t< variant, Idx >, std::initializer_list< U > &, Args... >, int > = 0>
MSTL_CONSTEXPR20 variant (inplace_construct_tag, std::initializer_list< U > ilist, Args &&... args) noexcept(is_nothrow_constructible_v< variant_alternative_t< variant, Idx >, std::initializer_list< U > &, Args... >)
 初始化列表原地构造函数
template<typename... Args, enable_if_t< disjunction_v< is_constructible< Types, Args... >... >, int > = 0>
 variant (Args &&... args)
 通用构造函数
MSTL_CONSTEXPR20 ~variant () noexcept
 析构函数
template<typename Lambda, enable_if_t< conjunction_v< is_invocable< Lambda, Types & >... >, int > = 0>
MSTL_CONSTEXPR20 common_type_t< invoke_result_t< Lambda, Types & >... > visit (Lambda &&lambda) noexcept(conjunction_v< is_nothrow_invocable< Lambda, Types & >... >)
 访问变体值
template<typename Lambda, enable_if_t< conjunction_v< is_invocable< Lambda, const Types & >... >, int > = 0>
MSTL_CONSTEXPR20 common_type_t< invoke_result_t< Lambda, const Types & >... > visit (Lambda &&lambda) const noexcept(conjunction_v< is_nothrow_invocable< Lambda, const Types & >... >)
 常量访问变体值
MSTL_NODISCARD MSTL_CONSTEXPR20 size_t index () const noexcept
 获取当前存储类型的索引
template<typename T, enable_if_t< is_any_of_v< T, Types... >, int > = 0>
MSTL_NODISCARD MSTL_CONSTEXPR20 bool holds_alternative () const noexcept
 检查是否存储特定类型的值
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
MSTL_CONSTEXPR20 variant_alternative_t< variant, Idx > & get ()
 获取指定索引位置的引用
template<typename T>
MSTL_CONSTEXPR20 T & get ()
 获取指定类型值的引用
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
MSTL_CONSTEXPR20 variant_alternative_t< variant, Idx > const & get () const
 获取指定索引位置的常量引用
template<typename T>
MSTL_CONSTEXPR20 T const & get () const
 获取指定类型值的常量引用
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
MSTL_CONSTEXPR20 variant_alternative_t< variant, Idx > * get_if () noexcept
 如果存在,获取指定索引位置的指针
template<typename T>
MSTL_CONSTEXPR20 T * get_if () noexcept
 如果存在,获取指定类型值的指针
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
MSTL_CONSTEXPR20 variant_alternative_t< variant, Idx > const * get_if () const noexcept
 如果存在,获取指定索引位置的常量指针
template<typename T>
MSTL_CONSTEXPR20 T const * get_if () const noexcept
 如果存在,获取指定类型值的常量指针
template<size_t Idx, typename... Args, enable_if_t<(Idx< sizeof...(Types)) &&is_constructible_v< variant_alternative_t< variant, Idx >, Args... >, int > = 0>
MSTL_CONSTEXPR20 void emplace (Args &&... args) noexcept(is_nothrow_constructible_v< variant_alternative_t< variant, Idx >, Args... >)
 在指定位置构造新值
template<typename T, typename... Args, enable_if_t< is_constructible_v< T, Args... >, int > = 0>
MSTL_CONSTEXPR20 void emplace (Args &&... args) noexcept(is_nothrow_constructible_v< T, Args... >)
 构造指定类型的新值
MSTL_CONSTEXPR20 void swap (variant &x) noexcept
 交换两个变体的内容
MSTL_NODISCARD MSTL_CONSTEXPR20 bool operator== (const variant &rhs) const
 相等比较运算符
MSTL_NODISCARD MSTL_CONSTEXPR20 bool operator< (const variant &rhs) const
 小于比较运算符
MSTL_NODISCARD MSTL_CONSTEXPR20 size_t to_hash () const
 计算变体的哈希值
Public 成员函数 继承自 icomparable< variant< Types... > >
MSTL_NODISCARD constexpr bool operator== (const variant< Types... > &rhs) const noexcept(noexcept(derived()==rhs))
 相等比较运算符
MSTL_NODISCARD constexpr bool operator!= (const variant< Types... > &rhs) const noexcept(noexcept(!(*this==rhs)))
 不等比较运算符
MSTL_NODISCARD constexpr bool operator< (const variant< Types... > &rhs) const noexcept(noexcept(derived()< rhs))
 小于比较运算符
MSTL_NODISCARD constexpr bool operator> (const variant< Types... > &rhs) const noexcept(noexcept(rhs< derived()))
 大于比较运算符
MSTL_NODISCARD constexpr bool operator<= (const variant< Types... > &rhs) const noexcept(noexcept(!(derived() > rhs)))
 小于等于比较运算符
MSTL_NODISCARD constexpr bool operator>= (const variant< Types... > &rhs) const noexcept(noexcept(!(derived()< rhs)))
 大于等于比较运算符
Public 成员函数 继承自 ihashable< variant< Types... > >
MSTL_NODISCARD constexpr size_t to_hash () const noexcept(noexcept(derived().to_hash()))
 获取对象的哈希值

详细描述

template<typename... Types>
struct variant< Types >

变体类型主模板

模板参数
Types可存储的类型列表

variant是一个类型安全的联合体,可以在运行时存储多种不同类型的值。 使用函数指针表实现各种操作,支持构造、赋值、访问、销毁等操作。

在文件 variant.hpp72 行定义.

构造及析构函数说明

◆ variant() [1/7]

template<typename... Types>
MSTL_CONSTEXPR20 variant< Types >::variant ( )
inlinenoexcept

默认构造函数

默认构造变体,存储第一个类型的默认值。

在文件 variant.hpp259 行定义.

引用了 variant().

被这些函数引用 operator<(), operator=(), operator=(), operator==(), swap(), variant(), variant(), variant() , 以及 variant().

◆ variant() [2/7]

template<typename... Types>
template<typename T, enable_if_t< disjunction_v< is_same< T, Types >... >, int > = 0>
MSTL_CONSTEXPR20 variant< Types >::variant ( T && value)
inlineexplicitnoexcept

从特定类型值构造

模板参数
T值类型
参数
value要存储的值

从给定类型的值移动构造变体。

在文件 variant.hpp272 行定义.

引用了 _MSTL, forward() , 以及 variant().

◆ variant() [3/7]

template<typename... Types>
MSTL_CONSTEXPR20 variant< Types >::variant ( const variant< Types > & x)
inline

拷贝构造函数

参数
x要拷贝的变体

从另一个变体拷贝构造当前变体。

在文件 variant.hpp285 行定义.

引用了 index() , 以及 variant().

◆ variant() [4/7]

template<typename... Types>
MSTL_CONSTEXPR20 variant< Types >::variant ( variant< Types > && x)
inlinenoexcept

移动构造函数

参数
x要移动的变体

从另一个变体移动构造当前变体。

在文件 variant.hpp310 行定义.

引用了 index() , 以及 variant().

◆ variant() [5/7]

template<typename... Types>
template<size_t Idx, typename... Args, enable_if_t< is_constructible_v< variant_alternative_t< variant, Idx >, Args... >, int > = 0>
MSTL_CONSTEXPR20 variant< Types >::variant ( inplace_construct_tag ,
Args &&... args )
inlineexplicitnoexcept

参数列表原地构造函数

模板参数
Idx要构造的类型的索引
Args参数类型
参数
args构造参数

在指定索引位置直接构造对象。

在文件 variant.hpp338 行定义.

引用了 _MSTL , 以及 forward().

◆ variant() [6/7]

template<typename... Types>
template<size_t Idx, typename U, typename... Args, enable_if_t< is_constructible_v< variant_alternative_t< variant, Idx >, std::initializer_list< U > &, Args... >, int > = 0>
MSTL_CONSTEXPR20 variant< Types >::variant ( inplace_construct_tag ,
std::initializer_list< U > ilist,
Args &&... args )
inlineexplicitnoexcept

初始化列表原地构造函数

模板参数
Idx要构造的类型的索引
U初始化列表元素类型
Args参数类型
参数
ilist初始化列表
args构造参数

使用初始化列表在指定索引位置构造对象。

在文件 variant.hpp356 行定义.

引用了 _MSTL , 以及 forward().

◆ variant() [7/7]

template<typename... Types>
template<typename... Args, enable_if_t< disjunction_v< is_constructible< Types, Args... >... >, int > = 0>
variant< Types >::variant ( Args &&... args)
inline

通用构造函数

模板参数
Args参数类型
参数
args构造参数

尝试使用给定参数构造变体,如果无法构造任何类型,则使用第一个类型的默认值。

在文件 variant.hpp370 行定义.

引用了 _MSTL , 以及 forward().

◆ ~variant()

template<typename... Types>
MSTL_CONSTEXPR20 variant< Types >::~variant ( )
inlinenoexcept

析构函数

调用当前存储类型的析构函数。

在文件 variant.hpp382 行定义.

引用了 index().

成员函数说明

◆ emplace() [1/2]

template<typename... Types>
template<typename T, typename... Args, enable_if_t< is_constructible_v< T, Args... >, int > = 0>
MSTL_CONSTEXPR20 void variant< Types >::emplace ( Args &&... args)
inlinenoexcept

构造指定类型的新值

模板参数
T类型
Args参数类型
参数
args构造参数

销毁当前值并在指定类型位置构造新值。

在文件 variant.hpp550 行定义.

引用了 _MSTL, emplace() , 以及 forward().

◆ emplace() [2/2]

template<typename... Types>
template<size_t Idx, typename... Args, enable_if_t<(Idx< sizeof...(Types)) &&is_constructible_v< variant_alternative_t< variant, Idx >, Args... >, int > = 0>
MSTL_CONSTEXPR20 void variant< Types >::emplace ( Args &&... args)
inlinenoexcept

在指定位置构造新值

模板参数
Idx索引位置
Args参数类型
参数
args构造参数

销毁当前值并在指定位置构造新值。

在文件 variant.hpp534 行定义.

引用了 _MSTL, emplace(), forward() , 以及 index().

被这些函数引用 emplace() , 以及 emplace().

◆ get() [1/4]

template<typename... Types>
template<typename T>
MSTL_CONSTEXPR20 T & variant< Types >::get ( )
inline

获取指定类型值的引用

模板参数
T类型
返回
指定类型值的引用
异常
value_exception如果类型不匹配

在文件 variant.hpp453 行定义.

引用了 get().

◆ get() [2/4]

template<typename... Types>
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
MSTL_CONSTEXPR20 variant_alternative_t< variant, Idx > & variant< Types >::get ( )
inline

获取指定索引位置的引用

模板参数
Idx索引位置
返回
指定位置元素的引用
异常
value_exception如果索引不匹配

在文件 variant.hpp439 行定义.

被这些函数引用 get() , 以及 get().

◆ get() [3/4]

template<typename... Types>
template<typename T>
MSTL_CONSTEXPR20 T const & variant< Types >::get ( ) const
inline

获取指定类型值的常量引用

模板参数
T类型
返回
指定类型值的常量引用
异常
value_exception如果类型不匹配

在文件 variant.hpp478 行定义.

引用了 get().

◆ get() [4/4]

template<typename... Types>
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
MSTL_CONSTEXPR20 variant_alternative_t< variant, Idx > const & variant< Types >::get ( ) const
inline

获取指定索引位置的常量引用

模板参数
Idx索引位置
返回
指定位置元素的常量引用
异常
value_exception如果索引不匹配

在文件 variant.hpp464 行定义.

◆ get_if() [1/4]

template<typename... Types>
template<typename T>
MSTL_CONSTEXPR20 T const * variant< Types >::get_if ( ) const
inlinenoexcept

如果存在,获取指定类型值的常量指针

模板参数
T类型
返回
指定类型值的常量指针,如果类型不匹配返回nullptr

在文件 variant.hpp520 行定义.

引用了 get_if().

◆ get_if() [2/4]

template<typename... Types>
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
MSTL_CONSTEXPR20 variant_alternative_t< variant, Idx > const * variant< Types >::get_if ( ) const
inlinenoexcept

如果存在,获取指定索引位置的常量指针

模板参数
Idx索引位置
返回
指定位置元素的常量指针,如果索引不匹配返回nullptr

在文件 variant.hpp509 行定义.

◆ get_if() [3/4]

template<typename... Types>
template<typename T>
MSTL_CONSTEXPR20 T * variant< Types >::get_if ( )
inlinenoexcept

如果存在,获取指定类型值的指针

模板参数
T类型
返回
指定类型值的指针,如果类型不匹配返回nullptr

在文件 variant.hpp499 行定义.

引用了 get_if().

◆ get_if() [4/4]

template<typename... Types>
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
MSTL_CONSTEXPR20 variant_alternative_t< variant, Idx > * variant< Types >::get_if ( )
inlinenoexcept

如果存在,获取指定索引位置的指针

模板参数
Idx索引位置
返回
指定位置元素的指针,如果索引不匹配返回nullptr

在文件 variant.hpp488 行定义.

被这些函数引用 get_if() , 以及 get_if().

◆ holds_alternative()

template<typename... Types>
template<typename T, enable_if_t< is_any_of_v< T, Types... >, int > = 0>
MSTL_NODISCARD MSTL_CONSTEXPR20 bool variant< Types >::holds_alternative ( ) const
inlinenoexcept

检查是否存储特定类型的值

模板参数
T要检查的类型
返回
如果存储的是指定类型返回true,否则返回false

在文件 variant.hpp428 行定义.

◆ index()

template<typename... Types>
MSTL_NODISCARD MSTL_CONSTEXPR20 size_t variant< Types >::index ( ) const
inlinenoexcept

获取当前存储类型的索引

返回
当前存储类型的索引

在文件 variant.hpp418 行定义.

被这些函数引用 emplace(), operator=(), operator=(), variant(), variant(), visit(), visit() , 以及 ~variant().

◆ operator<()

template<typename... Types>
MSTL_NODISCARD MSTL_CONSTEXPR20 bool variant< Types >::operator< ( const variant< Types > & rhs) const
inline

小于比较运算符

参数
rhs要比较的变体
返回
如果当前变体小于另一个变体返回true,否则返回false

在文件 variant.hpp600 行定义.

引用了 variant() , 以及 visit().

◆ operator=() [1/2]

template<typename... Types>
MSTL_CONSTEXPR20 variant & variant< Types >::operator= ( const variant< Types > & x)
inline

拷贝赋值运算符

参数
x要拷贝的变体
返回
当前变体的引用

将另一个变体的值拷贝赋值给当前变体。

在文件 variant.hpp297 行定义.

引用了 _MSTL, addressof(), index() , 以及 variant().

◆ operator=() [2/2]

template<typename... Types>
MSTL_CONSTEXPR20 variant & variant< Types >::operator= ( variant< Types > && x)
inlinenoexcept

移动赋值运算符

参数
x要移动的变体
返回
当前变体的引用

将另一个变体的值移动赋值给当前变体。

在文件 variant.hpp321 行定义.

引用了 _MSTL, addressof(), index() , 以及 variant().

◆ operator==()

template<typename... Types>
MSTL_NODISCARD MSTL_CONSTEXPR20 bool variant< Types >::operator== ( const variant< Types > & rhs) const
inline

相等比较运算符

参数
rhs要比较的变体
返回
如果两个变体相等返回true,否则返回false

两个变体相等当且仅当它们存储相同类型的值且值相等。

在文件 variant.hpp586 行定义.

引用了 variant() , 以及 visit().

◆ swap()

template<typename... Types>
MSTL_CONSTEXPR20 void variant< Types >::swap ( variant< Types > & x)
inlinenoexcept

交换两个变体的内容

参数
x要交换的变体

交换当前变体和另一个变体的值。

在文件 variant.hpp561 行定义.

引用了 _MSTL, addressof(), max() , 以及 variant().

◆ visit() [1/2]

template<typename... Types>
template<typename Lambda, enable_if_t< conjunction_v< is_invocable< Lambda, const Types & >... >, int > = 0>
MSTL_CONSTEXPR20 common_type_t< invoke_result_t< Lambda, const Types & >... > variant< Types >::visit ( Lambda && lambda) const
inlinenoexcept

常量访问变体值

模板参数
Lambda访问者类型
参数
lambda访问者函数
返回
访问者函数的返回值

使用访问者模式访问当前存储的常量值。

在文件 variant.hpp409 行定义.

引用了 _MSTL, forward() , 以及 index().

◆ visit() [2/2]

template<typename... Types>
template<typename Lambda, enable_if_t< conjunction_v< is_invocable< Lambda, Types & >... >, int > = 0>
MSTL_CONSTEXPR20 common_type_t< invoke_result_t< Lambda, Types & >... > variant< Types >::visit ( Lambda && lambda)
inlinenoexcept

访问变体值

模板参数
Lambda访问者类型
参数
lambda访问者函数
返回
访问者函数的返回值

使用访问者模式访问当前存储的值。

在文件 variant.hpp395 行定义.

引用了 _MSTL, forward() , 以及 index().

被这些函数引用 operator<(), operator==() , 以及 to_hash().


该结构体的文档由以下文件生成: