std::remove_extent

定义于头文件 <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)
获取数组类型在指定维度的大小
(类模板)
移除数组类型所有维度
(类模板)

版本历史

  • (当前 | 先前 2017年7月25日 (二) 05:33Fruderica讨论 | 贡献. . (1,620字节) (-394). . (撤销)
  • 当前 | 先前 2014年10月26日 (日) 18:19P12bot讨论 | 贡献 . . (2,014字节) (0). . (Fix some translations) (撤销)
  • 当前 | 先前 2013年7月2日 (二) 11:54P12bot讨论 | 贡献 . . (2,014字节) (-139). . (Use {{lc}}. Update links. Various fixes.) (撤销)
  • 当前 | 先前 2012年11月2日 (五) 14:08P12bot讨论 | 贡献 . . (2,153字节) (+249). . (r2.7.3) (机器人添加:de, en, es, fr, it, ja, pt, ru) (撤销)
  • 当前 | 先前 2012年10月27日 (六) 12:43P12讨论 | 贡献 . . (1,904字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前 2012年10月26日 (五) 06:00TranslationBot讨论 | 贡献. . (1,904字节) (-40). . (Translated from the English version using Google Translate) (撤销)
  • 当前 | 先前 2012年10月26日 (五) 04:09P12讨论 | 贡献 . . (1,944字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前) 2012年10月25日 (四) 12:00TranslationBot讨论 | 贡献. . (1,944字节) (+1,944). . (Translated from the English version using Google Translate)