Chinaunix

标题: 这里class和typename的区别? [打印本页]

作者: gnap    时间: 2006-11-20 15:29
标题: 这里class和typename的区别?
邮件列表中又报告了一个移植的问题。当然还是因为我写得不规范造成的。不过我想了解下:

  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

作者: gnap    时间: 2006-11-20 15:45
http://www.velocityreviews.com/f ... ss-vs-typename.html
google到了一篇文章。但还是想听大家的讨论。希望不吝赐教。
作者: converse    时间: 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
作者: tyc611    时间: 2006-11-20 17:36
建议都用typename,虽然typename和class都能在模板类型声明时使用,但新的建议是用typename,class是为了和以前的代码兼容
作者: steedhorse    时间: 2006-11-20 20:59
标题: 用来指示模板参数时是一样的。
class除了用来指示模板参数之外,当然还能用来定义类。
typename除了用来指示模板参数之外,还用来显式的指定某个东西是个类型,免得编译器有时分不出来像“A::a”这种东西到底是个类型名还是数据成员名。
作者: namtso    时间: 2006-11-21 09:28
原帖由 steedhorse 于 2006-11-20 20:59 发表
class除了用来指示模板参数之外,当然还能用来定义类。
typename除了用来指示模板参数之外,还用来显式的指定某个东西是个类型,免得编译器有时分不出来像“A::a”这种东西到底是个类型名还是数据成员名。

CSDN的晨星?
作者: gnap    时间: 2006-11-21 13:49
多谢各位,昨天下午已经把代码里的这部分做了修改。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2