std::remove_extent
来自cppreference.com
定义于头文件 <type_traits>
|
||
template< class T > struct remove_extent; |
(C++11 起) | |
若 T
是某类型 X
的数组,则提供等于 X
的成员 typedef type
,否则 type
为 T
。注意若 T 是多维数组,则只移除第一维。
添加 remove_extent
的特化的程序行为未定义。
成员类型
类型 | 定义 |
type
|
T 的元素类型
|
辅助类型
template< class T > using remove_extent_t = typename remove_extent<T>::type; |
(C++14 起) | |
可能的实现
template<class T> struct remove_extent { typedef T type; }; template<class T> struct remove_extent<T[]> { typedef T type; }; template<class T, std::size_t N> struct remove_extent<T[N]> { typedef T type; }; |
示例
运行此代码
#include <iostream> #include <iterator> #include <algorithm> #include <type_traits> template<class A> typename std::enable_if< std::rank<A>::value == 1 >::type print_1d(const A& a) { copy(a, a+std::extent<A>::value, std::ostream_iterator<typename std::remove_extent<A>::type>(std::cout, " ")); std::cout << '\n'; } int main() { int a[][3] = {{1,2,3},{4,5,6}}; // print_1d(a); // 编译时错误 print_1d(a[1]); }
输出:
4 5 6
参阅
(C++11) |
检查类型是否是数组类型 (类模板) |
(C++11) |
获取数组类型的维数 (类模板) |
(C++11) |
获取数组类型在指定维度的大小 (类模板) |
(C++11) |
移除给定数组类型的所有维度 (类模板) |