std::variant_size, std::variant_size_v
ja.cppreference.net より
| ヘッダ <variant>
|
||
template< class T >
struct variant_size; /* undefined */
|
で定義 (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<const volatile T>;
|
(5) | (C++17以上) (C++20で非推奨) |
おそらく cv 修飾されたバリアント内の代替型の数を、コンパイル時の定数式として提供します。
形式的には、
3-5) は UnaryTypeTrait の要件を満たし、その基底特性は
std::integral_constant<std::size_t, std::variant_size<T>::value>ヘルパー変数テンプレート
|
template
<
class
T
>
constexpr std:: size_t variant_size_v = std :: variant_size < T > :: value ; |
(C++17以降) | |
std::integral_constantから継承
メンバ定数
|
value
[static]
|
sizeof...(Types)
(public static member constant) |
メンバ関数
|
operator std::size_t
|
オブジェクトを
std::
size_t
に変換し、
value
を返す
(public member function) |
|
operator()
(C++14)
|
value
を返す
(public member function) |
メンバ型
| 型 | 定義 |
value_type
|
std:: size_t |
type
|
std:: integral_constant < std:: size_t , value > |
注記
std::variant_sizeのすべての特殊化は、
UnaryTypeTrait
を満たし、
base characteristic
は
std::
integral_constant
<
std::
size_t
, N
>
となる(
N
は何らかの値)。
例
このコードを実行
#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<const int, const float>> == 2); static_assert(std::variant_size_v<std::variant<std::variant<std::any>>> == 1); int main() {}
関連項目
|
指定されたインデックスの代替型をコンパイル時に取得する
(クラステンプレート) (エイリアステンプレート) |
|
|
(C++11)
|
以下のサイズを取得する
|