当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<b>C++箴言:理解typename的两个含义</b>[VC/C++编程]

赞助商链接



  本文“<b>C++箴言:理解typename的两个含义</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么差别?

template<class T> class Widget; // uses "class"
template<typename T> class Widget; // uses "typename"

答案:没什么差别.在声明一个 template type parameter(模板范例参数)的时刻,class 和 typename 意味着完好相同的东西.一些程序员更喜好在全部的时间都用 class,因为它更简单输入.其他人(包含我本人)更喜好 typename,因为它表示着这个参数不必如果一个 class type(类范例).少数开辟者在任何范例都被答应的时刻利用 typename,而把 class 保存给仅承受 user-defined types(用户定义范例)的场所.但是从 C++ 的概念看,class 和 typename 在声明一个 template parameter(模板参数)时意味着完好相同的东西.

但是,C++ 并不老是把 class 和 typename 视为平等的东西.有时你必须利用 typename.为了理解这一点,我们不得不谈论你会在一个 template(模板)中触及到的两种名字.

假定我们有一个函数的模板,它能获得一个 STL-compatible container(STL 兼容容器)中持有的能赋值给 ints 的对象.进一步假定这个函数只是简单地打印它的第二个元素的值.它是一个用胡涂的办法实现的胡涂的函数,并且就像我下面写的,它乃至不能编译,但是请将这些事前放在一边——有一种办法能发现我的笨拙:

template<typename C> // print 2nd element in
void print2nd(const C& container) // container;
{
 // this is not valid C++!
 if (container.size() >= 2) {
  C::const_iterator iter(container.begin()); // get iterator to 1st element
  ++iter; // move iter to 2nd element
  int value = *iter; // copy that element to an int
  std::cout << value; // print the int
 }
}

我突出了这个函数中的两个 local variables(部分变量),iter 和 value.iter 的范例是 C::const_iterator,一个依靠于 template parameter(模板参数)C 的范例.一个 template(模板)中的依靠于一个 template parameter(模板参数)的名字被称为 dependent names(依靠名字).当一个 dependent names(依靠名字)嵌套在一个 class(类)的内部时,我称它为 nested dependent name(嵌套依靠名字).C::const_iterator 是一个 nested dependent name(嵌套依靠名字).实际上,它是一个 nested dependent type name(嵌套依靠范例名),也就是说,一个触及到一个 type(范例)的 nested dependent name(嵌套依靠名字).


  以上是“<b>C++箴言:理解typename的两个含义</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .