std::variant_size, std::variant_size_v

来自cppreference.com
< cpp‎ | utility‎ | variant
 
 
 
 
在标头 <variant> 定义
template<class T >
struct variant_size;/* 无定义 */
(1) (C++17 起)
template<class... Types>

struct variant_size<std::variant<Types...>>

    :std::integral_constant<std::size_t, sizeof...(Types)>{};
(2) (C++17 起)
template<class T >
class variant_size<const T>;
(3) (C++17 起)
template<class T >
class variant_size<volatile T>;
(4) (C++17 起)
(C++20 弃用)
template<class T >
class variant_size<constvolatile T>;
(5) (C++17 起)
(C++20 弃用)

提供对可有 cv 限定的变体中的可选项数量的访问,作为编译时常量表达式。

正式地,

2) 满足基特征为 std::integral_constant<std::size_t, sizeof...(Types)>一元类型特征(UnaryTypeTrait) 的要求
3) 满足基特征为 std::integral_constant<std::size_t, variant_size<T>>一元类型特征(UnaryTypeTrait) 的要求

目录

[编辑]辅助变量模板

template<class T>
constexprstd::size_t variant_size_v = std::variant_size<T>::value;
(C++17 起)

继承自 std::integral_constant

成员常量

value
[静态]
sizeof...(Types)
(公开静态成员常量)

成员函数

operator std::size_t
将对象转换到 std::size_t,返回 value
(公开成员函数)
operator()
(C++14)
返回 value
(公开成员函数)

成员类型

类型 定义
value_typestd::size_t
typestd::integral_constant<std::size_t, value>

[编辑]注解

std::variant_size 的所有特化都满足以某个 Nstd::integral_constant<std::size_t, N>基特征一元类型特征(UnaryTypeTrait)

[编辑]示例

#include <any>#include <variant>   static_assert(std::variant_size_v<std::variant<>>==0); static_assert(std::variant_size_v<std::variant<int>>==1); static_assert(std::variant_size_v<std::variant<int, int>>==2); static_assert(std::variant_size_v<std::variant<int, int, int>>==3); static_assert(std::variant_size_v<std::variant<int, float, double>>==3); static_assert(std::variant_size_v<std::variant<std::monostate, void>>==2); static_assert(std::variant_size_v<std::variant<constint, constfloat>>==2); static_assert(std::variant_size_v<std::variant<std::variant<std::any>>>==1);   int main(){}

[编辑]参阅

在编译时获得按索引指定的可选项的类型
(类模板)(别名模板)[编辑]
获得 tuple 的大小
(类模板特化)[编辑]
close