std::remove_extent

来自cppreference.com
< cpp‎ | types
 
 
元编程库
类型特征
类型类别
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
类型属性
(C++11)
(C++11)
(C++14)
(C++11)(C++26 弃用)
(C++11)(C++20 前*)
(C++11)(C++20 弃用)
(C++11)
类型特征常量
元函数
(C++17)
受支持操作
关系与属性查询
类型修改
类型变换
(C++11)(C++23 弃用)
(C++11)(C++23 弃用)
(C++11)
(C++11)(C++20 前*)(C++17)

编译时有理数算术
编译时整数序列
 
在标头 <type_traits> 定义
template<class T >
struct remove_extent;
(C++11 起)

T 是某类型 X 的数组,则提供等于 X 的成员 typedef type,否则 type 等于 T。注意若 T 是多维数组,则只移除第一维。

如果程序添加了 std::remove_extent 的特化,那么行为未定义。

目录

[编辑]成员类型

类型 定义
typeT 的元素类型

[编辑]辅助类型

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)
获取数组类型在指定维数的大小
(类模板)[编辑]
从给定数组类型移除所有维度
(类模板)[编辑]
close