std::extent
来自cppreference.com
定义于头文件 <type_traits>
|
||
template< class T, unsigned N = 0> struct extent; |
(C++11 起) | |
若 T
是数组类型,则提供等于数组第 N
维元素数量的成员常量 value
,若 N
在 [0, std::rank<T>::value)
中。对于任何其他类型,或若 T
是在其首维度未知边界数组且 N
为 0 ,则 value
为 0 。
辅助变量模板
template< class T, unsigned N = 0 > inline constexpr std::size_t extent_v = extent<T, N>::value; |
(C++17 起) | |
继承自 std::integral_constant
成员常量
value [静态] |
T 的第 N 维的元素数 (公开静态成员常量) |
成员函数
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> |
可能的实现
template<class T, unsigned N = 0> struct extent : std::integral_constant<std::size_t, 0> {}; template<class T> struct extent<T[], 0> : std::integral_constant<std::size_t, 0> {}; template<class T, unsigned N> struct extent<T[], N> : std::extent<T, N-1> {}; template<class T, std::size_t I> struct extent<T[I], 0> : std::integral_constant<std::size_t, I> {}; template<class T, std::size_t I, unsigned N> struct extent<T[I], N> : std::extent<T, N-1> {}; |
示例
运行此代码
#include <iostream> #include <type_traits> int main() { std::cout << std::extent<int[3]>::value << '\n'; // < 默认维度为 0 std::cout << std::extent<int[3][4], 0>::value << '\n'; std::cout << std::extent<int[3][4], 1>::value << '\n'; std::cout << std::extent<int[3][4], 2>::value << '\n'; std::cout << std::extent<int[]>::value << '\n'; const auto ext = std::extent<int[9]>{}; std::cout << ext << '\n'; // < 隐式转换到 std::size_t const int ints[] = {1,2,3,4}; std::cout << std::extent<decltype(ints)>::value << '\n'; // < 数组大小 }
输出:
3 3 4 0 0 9 4
参阅
(C++11) |
检查类型是否是数组类型 (类模板) |
(C++11) |
获取数组类型的维数 (类模板) |
(C++11) |
从给定数组类型移除一个维度 (类模板) |
(C++11) |
移除给定数组类型的所有维度 (类模板) |