std::variant_size, std::variant_size_v
來自 cppreference.com
定義於標頭檔案 <variant> |
||
template< class T > struct variant_size; /* 未定義 */ |
(1) | (C++17 起) |
template< class... Types > struct variant_size<std::variant<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 限定符的 variant 中候選項數量的訪問,作為編譯時常量表達式。
形式上,
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 [靜態] |
sizeof...(Types) (public static 成員常量) |
成員函式
operator std::size_t |
將物件轉換為 std::size_t,返回 value (公開成員函式) |
operator() (C++14) |
返回 value (公開成員函式) |
成員型別
型別 | 定義 |
value_type
|
std::size_t |
型別
|
std::integral_constant<std::size_t, value> |
[編輯] 註解
所有 std::variant_size
的特化都滿足 一元型別特性 (UnaryTypeTrait),其基本特性為 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) |
獲取 tuple 的大小一個 |