- 论坛徽章:
- 0
|
本帖最后由 Frahm 于 2013-05-21 20:32 编辑
- template<typename T>
- struct remove_all_extents {
- typedef T type;
- };
- template<typename T>
- struct remove_all_extents<T[]> { //关键这里
- typedef typename remove_all_extents<T>::type type;
- };
- template<typename T, size_t N>
- struct remove_all_extents<T[N]> {
- typedef typename remove_all_extents<T>::type type;
- };
复制代码 这里remove_all_extents的作用就是获取任意维数组的基本类型。
我不明白的是第一个特化那里,T[]有什么用?我试过了,去掉那个特化效果也一样。
还有T[]这里不指明维数的话可以吗?而且貌似没有退化为指针类型,并且根本没有进入递归。
那么这么实现是什么用意呢?还是我哪里搞错了呢?
刚试了下:
std::cout << typeid(int[]).name() << '\n';
输出:
int [0]
然而 int a[0]是编译通不过的,那么int [0]是什么类型呢?
|
|