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

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

#include <variant.hpp>

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

Public 成员函数

NEFORCE_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>
NEFORCE_CONSTEXPR20 variant (T &&value) noexcept(is_nothrow_move_constructible_v< T >)
 从特定类型值构造
NEFORCE_CONSTEXPR20 variant (const variant &other)
 拷贝构造函数
NEFORCE_CONSTEXPR20 variantoperator= (const variant &other)
 拷贝赋值运算符
NEFORCE_CONSTEXPR20 variant (variant &&other) noexcept
 移动构造函数
NEFORCE_CONSTEXPR20 variantoperator= (variant &&other) noexcept
 移动赋值运算符
template<size_t Idx, typename... Args, enable_if_t< is_constructible_v< variant_alternative_t< variant, Idx >, Args... >, int > = 0>
NEFORCE_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>
NEFORCE_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)
 通用构造函数
NEFORCE_CONSTEXPR20 ~variant () noexcept
 析构函数
template<typename Lambda, enable_if_t< conjunction_v< is_invocable< Lambda, Types & >... >, int > = 0>
NEFORCE_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>
NEFORCE_CONSTEXPR20 common_type_t< invoke_result_t< Lambda, const Types & >... > visit (Lambda &&lambda) const noexcept(conjunction_v< is_nothrow_invocable< Lambda, const Types & >... >)
 常量访问变体值
NEFORCE_NODISCARD NEFORCE_CONSTEXPR20 size_t index () const noexcept
 获取当前存储类型的索引
template<typename T, enable_if_t< is_any_of_v< T, Types... >, int > = 0>
NEFORCE_NODISCARD NEFORCE_CONSTEXPR20 bool holds_alternative () const noexcept
 检查是否存储特定类型的值
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
NEFORCE_CONSTEXPR20 variant_alternative_t< variant, Idx > & get ()
 获取指定索引位置的引用
template<typename T>
NEFORCE_CONSTEXPR20 T & get ()
 获取指定类型值的引用
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
NEFORCE_CONSTEXPR20 variant_alternative_t< variant, Idx > const & get () const
 获取指定索引位置的常量引用
template<typename T>
NEFORCE_CONSTEXPR20 T const & get () const
 获取指定类型值的常量引用
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
NEFORCE_CONSTEXPR20 variant_alternative_t< variant, Idx > * get_if () noexcept
 如果存在,获取指定索引位置的指针
template<typename T>
NEFORCE_CONSTEXPR20 T * get_if () noexcept
 如果存在,获取指定类型值的指针
template<size_t Idx, enable_if_t<(Idx< sizeof...(Types)), int > = 0>
NEFORCE_CONSTEXPR20 variant_alternative_t< variant, Idx > const * get_if () const noexcept
 如果存在,获取指定索引位置的常量指针
template<typename T>
NEFORCE_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>
NEFORCE_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>
NEFORCE_CONSTEXPR20 void emplace (Args &&... args) noexcept(is_nothrow_constructible_v< T, Args... >)
 构造指定类型的新值
NEFORCE_CONSTEXPR20 void swap (variant &other) noexcept
 交换两个变体的内容
NEFORCE_NODISCARD NEFORCE_CONSTEXPR20 bool operator== (const variant &rhs) const
 相等比较运算符
NEFORCE_NODISCARD NEFORCE_CONSTEXPR20 bool operator< (const variant &rhs) const
 小于比较运算符
NEFORCE_NODISCARD NEFORCE_CONSTEXPR20 size_t to_hash () const
 计算变体的哈希值
Public 成员函数 继承自 icomparable< variant< Types... > >
NEFORCE_NODISCARD constexpr bool operator== (const variant< Types... > &rhs) const noexcept(noexcept(derived()==rhs))
 相等比较运算符
NEFORCE_NODISCARD constexpr bool operator!= (const variant< Types... > &rhs) const noexcept(noexcept(!(*this==rhs)))
 不等比较运算符
NEFORCE_NODISCARD constexpr bool operator< (const variant< Types... > &rhs) const noexcept(noexcept(derived()< rhs))
 小于比较运算符
NEFORCE_NODISCARD constexpr bool operator> (const variant< Types... > &rhs) const noexcept(noexcept(rhs< derived()))
 大于比较运算符
NEFORCE_NODISCARD constexpr bool operator<= (const variant< Types... > &rhs) const noexcept(noexcept(!(derived() > rhs)))
 小于等于比较运算符
NEFORCE_NODISCARD constexpr bool operator>= (const variant< Types... > &rhs) const noexcept(noexcept(!(derived()< rhs)))
 大于等于比较运算符
Public 成员函数 继承自 ihashable< variant< Types... > >
NEFORCE_NODISCARD constexpr size_t to_hash () const noexcept(noexcept(derived().to_hash()))
 获取对象的哈希值

详细描述

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

变体类型主模板

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

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

在文件 variant.hpp68 行定义.

构造及析构函数说明

◆ variant() [1/7]

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

默认构造函数

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

在文件 variant.hpp245 行定义.

◆ variant() [2/7]

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

从特定类型值构造

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

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

在文件 variant.hpp257 行定义.

◆ variant() [3/7]

template<typename... Types>
NEFORCE_CONSTEXPR20 variant< Types >::variant ( const variant< Types > & other)
inline

拷贝构造函数

参数
other要拷贝的变体

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

在文件 variant.hpp269 行定义.

◆ variant() [4/7]

template<typename... Types>
NEFORCE_CONSTEXPR20 variant< Types >::variant ( variant< Types > && other)
inlinenoexcept

移动构造函数

参数
other要移动的变体

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

在文件 variant.hpp296 行定义.

◆ 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>
NEFORCE_CONSTEXPR20 variant< Types >::variant ( inplace_construct_tag ,
Args &&... args )
inlineexplicitnoexcept

参数列表原地构造函数

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

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

在文件 variant.hpp327 行定义.

◆ 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>
NEFORCE_CONSTEXPR20 variant< Types >::variant ( inplace_construct_tag ,
std::initializer_list< U > ilist,
Args &&... args )
inlineexplicitnoexcept

初始化列表原地构造函数

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

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

在文件 variant.hpp346 行定义.

◆ 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.hpp362 行定义.

◆ ~variant()

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

析构函数

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

在文件 variant.hpp374 行定义.

成员函数说明

◆ emplace() [1/2]

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

构造指定类型的新值

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

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

在文件 variant.hpp543 行定义.

◆ 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>
NEFORCE_CONSTEXPR20 void variant< Types >::emplace ( Args &&... args)
inlinenoexcept

在指定位置构造新值

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

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

在文件 variant.hpp528 行定义.

被这些函数引用 variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::emplace().

◆ get() [1/4]

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

获取指定类型值的引用

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

在文件 variant.hpp441 行定义.

◆ get() [2/4]

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

获取指定索引位置的引用

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

在文件 variant.hpp427 行定义.

被这些函数引用 variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::get().

◆ get() [3/4]

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

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

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

在文件 variant.hpp466 行定义.

◆ get() [4/4]

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

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

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

在文件 variant.hpp452 行定义.

◆ get_if() [1/4]

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

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

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

在文件 variant.hpp512 行定义.

◆ get_if() [2/4]

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

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

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

在文件 variant.hpp499 行定义.

◆ get_if() [3/4]

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

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

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

在文件 variant.hpp489 行定义.

◆ get_if() [4/4]

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

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

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

在文件 variant.hpp476 行定义.

◆ holds_alternative()

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

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

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

在文件 variant.hpp416 行定义.

◆ index()

◆ operator<()

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

小于比较运算符

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

在文件 variant.hpp594 行定义.

◆ operator=() [1/2]

template<typename... Types>
NEFORCE_CONSTEXPR20 variant & variant< Types >::operator= ( const variant< Types > & other)
inline

拷贝赋值运算符

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

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

在文件 variant.hpp281 行定义.

◆ operator=() [2/2]

template<typename... Types>
NEFORCE_CONSTEXPR20 variant & variant< Types >::operator= ( variant< Types > && other)
inlinenoexcept

移动赋值运算符

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

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

在文件 variant.hpp308 行定义.

◆ operator==()

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

相等比较运算符

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

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

在文件 variant.hpp580 行定义.

◆ swap()

template<typename... Types>
NEFORCE_CONSTEXPR20 void variant< Types >::swap ( variant< Types > & other)
inlinenoexcept

交换两个变体的内容

参数
other要交换的变体

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

在文件 variant.hpp553 行定义.

◆ to_hash()

template<typename... Types>
NEFORCE_NODISCARD NEFORCE_CONSTEXPR20 size_t variant< Types >::to_hash ( ) const

计算变体的哈希值

返回
变体的哈希值

◆ visit() [1/2]

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

常量访问变体值

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

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

在文件 variant.hpp399 行定义.

◆ visit() [2/2]

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

访问变体值

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

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

在文件 variant.hpp386 行定义.

被这些函数引用 variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::operator<() , 以及 variant< none_t, ::sockaddr_in, ::sockaddr_in6 >::operator==().


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