|
| 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 variant & | operator= (const variant &x) |
| | 拷贝赋值运算符
|
| MSTL_CONSTEXPR20 | variant (variant &&x) noexcept |
| | 移动构造函数
|
| MSTL_CONSTEXPR20 variant & | operator= (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 |
| | 计算变体的哈希值
|
| 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))) |
| | 大于等于比较运算符
|
| MSTL_NODISCARD constexpr size_t | to_hash () const noexcept(noexcept(derived().to_hash())) |
| | 获取对象的哈希值
|
template<typename... Types>
struct variant< Types >
变体类型主模板
- 模板参数
-
variant是一个类型安全的联合体,可以在运行时存储多种不同类型的值。 使用函数指针表实现各种操作,支持构造、赋值、访问、销毁等操作。
在文件 variant.hpp 第 72 行定义.