std::tuple_size<std::tuple>

< cpp‎ | utility‎ | tuple
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等字符串转换
(C++17)
(C++17)
 
 
定义于头文件 <tuple>
template< class T >
class tuple_size; /*undefined*/
(1) (C++11 起)
template< class... Types >

class tuple_size< std::tuple<Types...> >

 : public std::integral_constant<std::size_t, sizeof...(Types)> { };
(2) (C++11 起)
定义于头文件 <tuple>
定义于头文件 <array>
(C++17 起)
定义于头文件 <utility>
(C++17 起)
定义于头文件 <ranges>
(C++20 起)
template< class T >

class tuple_size<const T>

 : public std::integral_constant<std::size_t, tuple_size<T>::value> { };
(3) (C++11 起)
template< class T >

class tuple_size< volatile T >

 : public std::integral_constant<std::size_t, tuple_size<T>::value> { };
(4) (C++11 起)
(C++20 中弃用)
template< class T >

class tuple_size< const volatile T >

 : public std::integral_constant<std::size_t, tuple_size<T>::value> { };
(5) (C++11 起)
(C++20 中弃用)

提供对 tuple 中元素数量的访问,作为编译时常量表达式。

在通过包含 <tuple> 头文件变得合法以外,模板 (3-5) 在包含头文件 <array> 或 <utility> 时可用。

所有 std::tuple_size 的特化满足 BaseCharacteristic 对于某些 Nstd::integral_constant<std::size_t, N>一元类型特征 (UnaryTypeTrait)

cv-T 模板 (3-5) 是 SFINAE 友好的:若 std::tuple_size<T>::value 在视作不求值运算数时为病式,则 (3-5) 不提供成员 value 。访问检查如同在无关于 tuple_sizeT 的语境进行。仅考虑表达式直接语境的合法性。这允许:

#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 的大小
(类模板特化)
获得 pair 的大小
(类模板特化)
元组式访问指定的元素
(函数模板)
获得指定元素的类型
(类模板特化)