免费注册 查看新帖 |

Chinaunix

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

这里class和typename的区别? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-20 15:29 |只看该作者 |倒序浏览
邮件列表中又报告了一个移植的问题。当然还是因为我写得不规范造成的。不过我想了解下:

  1. template<typename _uintX>
  2. const class contact<_uintX>::uint_type contact<_uintX>::get_node_id()
  3. const
  4. {
  5.     return m_node_id;

  6. }
复制代码



  1. template<typename _uintX>
  2. const typename contact<_uintX>::uint_type
  3. contact<_uintX>::get_node_id() const
  4. {
  5.     return m_node_id;

  6. }
复制代码

中的,使用class和typename生命的contact中的类型。这里用class还是typename有何不同?是否在模板中typedef时使用的哪个关键字,这里就要用哪个?我在模板中定义的时候使用的是typename.

原文:
Hey,

I was just wondering if anyone could tell me if there a big difference
between:

template<typename _uintX>
const class contact<_uintX>::uint_type contact<_uintX>::get_node_id()
const
{
    return m_node_id;

}

And

template<typename _uintX>
const typename contact<_uintX>::uint_type
contact<_uintX>::get_node_id() const
{
    return m_node_id;

}

It doesn't compile under vc71 with the class declaration

论坛徽章:
0
2 [报告]
发表于 2006-11-20 15:45 |只看该作者
http://www.velocityreviews.com/f ... ss-vs-typename.html
google到了一篇文章。但还是想听大家的讨论。希望不吝赐教。

论坛徽章:
0
3 [报告]
发表于 2006-11-20 16:57 |只看该作者

  1. template<typename _uintX>
  2. const class contact<_uintX>::uint_type contact<_uintX>::get_node_id()
  3. const
  4. {
  5.     return m_node_id;

  6. }
复制代码

这里用class显然是不对的
class只能用在声明template的模版参数和声明类的时候.
而typename除了可以在模版中使用以外,还可以显示的说明某个东东其实是一个类型.

看看:
http://www.cppblog.com/converse/archive/2006/03/22/4476.html

论坛徽章:
0
4 [报告]
发表于 2006-11-20 17:36 |只看该作者
建议都用typename,虽然typename和class都能在模板类型声明时使用,但新的建议是用typename,class是为了和以前的代码兼容

论坛徽章:
0
5 [报告]
发表于 2006-11-20 20:59 |只看该作者

用来指示模板参数时是一样的。

class除了用来指示模板参数之外,当然还能用来定义类。
typename除了用来指示模板参数之外,还用来显式的指定某个东西是个类型,免得编译器有时分不出来像“A::a”这种东西到底是个类型名还是数据成员名。

论坛徽章:
0
6 [报告]
发表于 2006-11-21 09:28 |只看该作者
原帖由 steedhorse 于 2006-11-20 20:59 发表
class除了用来指示模板参数之外,当然还能用来定义类。
typename除了用来指示模板参数之外,还用来显式的指定某个东西是个类型,免得编译器有时分不出来像“A::a”这种东西到底是个类型名还是数据成员名。

CSDN的晨星?

论坛徽章:
0
7 [报告]
发表于 2006-11-21 13:49 |只看该作者
多谢各位,昨天下午已经把代码里的这部分做了修改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP