# std::remove_extent

< cpp‎ | types

定义于头文件 `<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

### 参阅

is_array (C++11) | 检查类型是否是数组类型 (类模板)
rank (C++11) | 获取数组类型的维数 (类模板)
extent (C++11) | 获取数组类型在指定维度的大小 (类模板)
remove_all_extents (C++11) | 移除给定数组类型的所有维度 (类模板)