std::remove_extent
来自cppreference.com
在标头 <type_traits> 定义 | ||
template<class T > struct remove_extent; | (C++11 起) | |
若 T
是某类型 X
的数组,则提供等于 X
的成员 typedef type
,否则 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); // 编译时错误 print_1d(a[1]);}
输出:
4 5 6
[编辑]参阅
(C++11) | 检查类型是否为数组类型 (类模板) |
(C++11) | 获取数组类型的维数 (类模板) |
(C++11) | 获取数组类型在指定维数的大小 (类模板) |
(C++11) | 从给定数组类型移除所有维度 (类模板) |