std::tuple_size<std::tuple>
定义于头文件 <tuple>
|
||
template< class T > class tuple_size; /*undefined*/ |
(1) | (C++11 起) |
template< class... Types > class tuple_size< std::tuple<Types...> > |
(2) | (C++11 起) |
定义于头文件 <tuple>
|
||
定义于头文件 <array>
|
(C++17 起) |
|
定义于头文件 <utility>
|
(C++17 起) |
|
定义于头文件 <ranges>
|
(C++20 起) |
|
template< class T > class tuple_size<const T> |
(3) | (C++11 起) |
template< class T > class tuple_size< volatile T > |
(4) | (C++11 起) (C++20 中弃用) |
template< class T > class tuple_size< const volatile T > |
(5) | (C++11 起) (C++20 中弃用) |
提供对 tuple 中元素数量的访问,作为编译时常量表达式。
在通过包含 <tuple> 头文件变得合法以外,模板 (3-5) 在包含头文件 <array> 或 <utility> 时可用。
所有 std::tuple_size
的特化满足 BaseCharacteristic 对于某些 N
为 std::integral_constant<std::size_t, N>
的一元类型特征 (UnaryTypeTrait) 。
cv-T 模板 (3-5) 是 SFINAE 友好的:若 #include <utility> struct X { int a, b; }; const auto [x, y] = X(); // 结构化绑定声明首先尝试 tuple_size<const X> // 这试图使用 tuple_size<X>::value ,而那是 OK 的 |
(C++17 起) |
辅助变量模板
template< class T > inline constexpr std::size_t tuple_size_v = tuple_size<T>::value; |
(C++17 起) | |
继承自 std::integral_constant
成员常量
value [静态] |
sizeof...(Types) (公开静态成员常量) |
成员函数
operator std::size_t |
转换对象为 std::size_t ,返回 value (公开成员函数) |
operator() (C++14) |
返回 value (公开成员函数) |
成员类型
类型 | 定义 |
value_type
|
std::size_t
|
type
|
std::integral_constant<std::size_t, value> |
示例
运行此代码
#include <iostream> #include <tuple> template <class T> void test(T t) { int a[std::tuple_size<T>::value]; // 可在编译时 std::cout << std::tuple_size<T>::value << '\n'; // 或在运行时使用 } int main() { test(std::make_tuple(1, 2, 3.14)); }
输出:
3
参阅
获得 array 的大小 (类模板特化) | |
(C++11) |
获得 pair 的大小 (类模板特化) |
元组式访问指定的元素 (函数模板) | |
获得指定元素的类型 (类模板特化) |