std::tuple_size<std::tuple>_C++中文网
| 定义于头文件 |
||
| template< class T > |
(1) | (C++11 起) |
| template< class... Types > class tuple_size< std::tuple<Types...> > |
(2) | (C++11 起) |
| 定义于头文件 |
||
| 定义于头文件 |
(C++17 起) |
|
| 定义于头文件 |
(C++17 起) |
|
| 定义于头文件 |
(C++20 起) |
|
| template< class T > class tuple_size<const T> |
(3) | (C++11 起) |
| template< class T > class tuple_size< volatile T > |
(4) | (C++11 起) |
| template< class T > class tuple_size< const volatile T > |
(5) | (C++11 起) |
提供对 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 > |
(C++17 起) | |
示例
#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)); }
输出: