免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1651 | 回复: 1
打印 上一主题 下一主题

[C++] T[]类型模版特化? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-21 19:10 |只看该作者 |倒序浏览
本帖最后由 Frahm 于 2013-05-21 20:32 编辑
  1. template<typename T>
  2. struct remove_all_extents {
  3.   typedef T type;
  4. };

  5. template<typename T>
  6. struct remove_all_extents<T[]> { //关键这里
  7.   typedef typename remove_all_extents<T>::type type;
  8. };

  9. template<typename T, size_t N>
  10. struct remove_all_extents<T[N]> {
  11.   typedef typename remove_all_extents<T>::type type;
  12. };
复制代码
这里remove_all_extents的作用就是获取任意维数组的基本类型。
我不明白的是第一个特化那里,T[]有什么用?我试过了,去掉那个特化效果也一样。
还有T[]这里不指明维数的话可以吗?而且貌似没有退化为指针类型,并且根本没有进入递归。
那么这么实现是什么用意呢?还是我哪里搞错了呢?

刚试了下:
std::cout << typeid(int[]).name() << '\n';
输出:
int [0]

然而 int a[0]是编译通不过的,那么int [0]是什么类型呢?

论坛徽章:
0
2 [报告]
发表于 2013-05-21 20:40 |只看该作者
本帖最后由 Frahm 于 2013-05-21 20:40 编辑

问到答案了,摸板中T[]的类型不是T[0],而是incomplete type, 没有维数声明的不完整类型。
具体见:
http://stackoverflow.com/questio ... late-specialization
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP