std::remove_extent

来自cppreference.com
< cpp‎ | types
 
 
工具库
类型支持(基本类型、 RTTI 、类型特性)
动态内存管理
错误处理
程序工具
变参数函数
日期和时间
函数对象
(C++11)
关系运算符
optionalanyvariant (C++17)
pair 与 tuple
(C++11)
(C++17)
swap 、 forward 与 move
(C++14)
(C++11)
(C++11)
初等字符串转换
(C++17)
(C++17)
类型运算
(C++11)
(C++17)
 
类型支持
基本类型
基础类型
定宽整数类型 (C++11)
数值极限
C 数值极限接口
运行时类型信息
类型特性
类型类别
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
类型属性
(C++11)
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(C++17 中弃用)
(C++11)
类型特性常量
元函数
(C++17)
端序
(C++20)
受支持操作
关系与属性查询
(C++11)
(C++11)
(C++11)
(C++11)
类型修改
(C++11)
(C++11)
(C++11)
remove_extent
(C++11)
类型变换
(C++11)
(C++11)
(C++17)
(C++11)(C++17 中弃用)
(C++17)
 
定义于头文件 <type_traits>
template< class T >
struct remove_extent;
(C++11 起)

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

目录

[编辑] 成员类型

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