std::remove_extent
来自 cppreference.com
定义在头文件 <type_traits> 中 |
||
template< class T > struct remove_extent; |
(自 C++11 起) | |
如果 T
是某种类型 X
的数组,则提供成员 typedef type
等于 X
,否则 type
为 T
。请注意,如果 T 是多维数组,则只移除第一个维度。
如果程序为 std::remove_extent
添加了专门化,则行为未定义。
内容 |
[编辑] 成员类型
名称 | 定义 |
type
|
T 的元素类型 |
[编辑] 辅助类型
template< class T > using remove_extent_t = typename remove_extent<T>::type; |
(自 C++14 起) | |
[编辑] 可能的实现
template<class T> struct remove_extent { using type = T; }; template<class T> struct remove_extent<T[]> { using type = T; }; template<class T, std::size_t N> struct remove_extent<T[N]> { using type = T; }; |
[编辑] 示例
运行此代码
#include <algorithm> #include <iostream> #include <iterator> #include <type_traits> template<class A> std::enable_if_t<std::rank_v<A> == 1> print_1d(const A& a) { std::copy(a, a + std::extent_v<A>, std::ostream_iterator<std::remove_extent_t<A>>(std::cout, " ")); std::cout << '\n'; } int main() { int a[][3] = {{1, 2, 3}, {4, 5, 6}}; // print_1d(a); // compile-time error print_1d(a[1]); }
输出
4 5 6
[编辑] 另请参阅
(C++11) |
检查类型是否为数组类型 (类模板) |
(C++11) |
获取数组类型的维度数量 (类模板) |
(C++11) |
获取数组类型沿指定维度的尺寸 (类模板) |
(C++11) |
从给定的数组类型中移除所有范围 (类模板) |