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

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

#include <variant.hpp>

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

Public 成员函数

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

详细描述

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

变体类型主模板

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

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

在文件 variant.hpp68 行定义.

构造及析构函数说明

◆ variant() [1/7]

template<typename... Types>
variant< Types >::variant ( )
inlineconstexprnoexcept

默认构造函数

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

在文件 variant.hpp271 行定义.

◆ variant() [2/7]

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

从特定类型值构造

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

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

在文件 variant.hpp283 行定义.

◆ variant() [3/7]

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

拷贝构造函数

参数
other要拷贝的变体

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

在文件 variant.hpp295 行定义.

◆ variant() [4/7]

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

移动构造函数

参数
other要移动的变体

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

在文件 variant.hpp322 行定义.

◆ 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>
variant< Types >::variant ( pass_size_construct_tag< Idx > ,
Args &&... args )
inlineexplicitconstexprnoexcept

参数列表原地构造函数

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

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

在文件 variant.hpp353 行定义.

◆ 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>
variant< Types >::variant ( pass_size_construct_tag< Idx > ,
std::initializer_list< U > ilist,
Args &&... args )
inlineexplicitconstexprnoexcept

初始化列表原地构造函数

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

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

在文件 variant.hpp372 行定义.

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

◆ ~variant()

template<typename... Types>
variant< Types >::~variant ( )
inlineconstexprnoexcept

析构函数

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

在文件 variant.hpp400 行定义.

成员函数说明

◆ emplace() [1/2]

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

构造指定类型的新值

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

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

在文件 variant.hpp569 行定义.

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

在指定位置构造新值

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

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

在文件 variant.hpp554 行定义.

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

◆ equal_to()

template<typename... Types>
bool variant< Types >::equal_to ( const variant< Types > & rhs) const
inlinenodiscardconstexpr

相等比较运算符

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

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

在文件 variant.hpp606 行定义.

◆ get() [1/4]

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

获取指定类型值的引用

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

在文件 variant.hpp467 行定义.

◆ get() [2/4]

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

获取指定索引位置的引用

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

在文件 variant.hpp453 行定义.

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

◆ get() [3/4]

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

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

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

在文件 variant.hpp492 行定义.

◆ get() [4/4]

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

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

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

在文件 variant.hpp478 行定义.

◆ get_if() [1/4]

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

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

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

在文件 variant.hpp538 行定义.

◆ get_if() [2/4]

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

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

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

在文件 variant.hpp525 行定义.

◆ get_if() [3/4]

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

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

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

在文件 variant.hpp515 行定义.

◆ get_if() [4/4]

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

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

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

在文件 variant.hpp502 行定义.

◆ holds_alternative()

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

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

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

在文件 variant.hpp442 行定义.

◆ index()

◆ less_than()

template<typename... Types>
bool variant< Types >::less_than ( const variant< Types > & rhs) const
inlinenodiscardconstexpr

小于比较运算符

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

在文件 variant.hpp620 行定义.

◆ operator=() [1/2]

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

拷贝赋值运算符

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

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

在文件 variant.hpp307 行定义.

◆ operator=() [2/2]

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

移动赋值运算符

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

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

在文件 variant.hpp334 行定义.

◆ swap()

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

交换两个变体的内容

参数
other要交换的变体

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

在文件 variant.hpp579 行定义.

◆ to_hash()

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

计算变体的哈希值

返回
变体的哈希值

◆ visit() [1/2]

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

常量访问变体值

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

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

在文件 variant.hpp425 行定义.

◆ visit() [2/2]

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

访问变体值

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

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

在文件 variant.hpp412 行定义.

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


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