`
xinklabi
  • 浏览: 1558779 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

C++ Template 中的typename、class关键字区别

阅读更多

 

在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?
        相信学习C++的人对class这个关键字都非常明白,class用于定义类,在模板引入c++后,最初定义模板的方法为:       template<class T>......
在这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为一个类型,这样在定义模板的时候就可以使用下面的方式了:       template<typename T>......
在模板定义语法中关键字class与typename的作用完全一样。
        typename难道仅仅在模板定义中起作用吗?其实不是这样,typename另外一个作用为:使用嵌套依赖类型(nested depended name),如下所示:
class MyArray     
   {     
   public:
       typedef   int   LengthType;
       .....
   }

   template<class T>
   void MyMethod( T myarr )
   {         
       typedef typename T::LengthType LengthType;       
       LengthType length = myarr.GetLength;
   }
这个时候typename的作用就是告诉c++编译器,typename后面的字符串为一个类型名称,而不是成员函数或者成员变量,这个时候如果前面没有typename,编译器没有任何办法知道T::LengthType是一个类型还是一个成员名称(静态数据成员或者静态函数),所以编译不能够通过。

分享到:
评论

相关推荐

    阅读材料-C++ 模板中的typename、class关键字.rar_C++ typename_class

    C++ Template中的typename、class关键字,模板中关键字的class与typename的作用

    C++的template模板中class与typename关键字的区别分析

    中我们来谈一谈C++的template模板中class与typename关键字的区别分析,同时会讲到嵌套从属名称时的一些注意点,需要的朋友可以参考下

    详解C++的模板中typename关键字的用法

    其实,这里最常用的是使用关键字class,而且二者功能完全相同,这里的class和定义类时的class完全是两回事,C++当时就是为了减少关键字,才使用了class。但最终却不得不引入了typename,究竟是 什么原因呢

    C++关键字大全(67个).txt

    C++关键字大全(67个) asm auto bad_cast bad_typeid bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum except explicit extern false finally float ...

    c++中typename和class的区别介绍

    相信学习C++的人对class这个关键字都非常明白,class用于定义类。...在模板定义语法中关键字class与typename的作用完全一样。 typename难道仅仅在模板定义中起作用吗?其实不是这样,typename另外一个作用为:使

    C++ 类模板和模板类的深入解析

    1、在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?  答:class用于定义类,在模板引入c++后,初定义模板的方法为:template&lt;class&gt;,这里class...

    深入理解c++模板中的class与typename

    在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?下面这篇文章主要给大家介绍了关于c++模板中class与typename的相关资料,需要的朋友可以参考下。

    C++关键字详细使用

    char class const const_cast continue default delete do double dynamic_cast else enum except explicit extern false finally float for friend goto if inline int long mutable namespace new operator ...

    Advanced Metaprogramming in Classic C++

    The classic C++ language admits two basic types of templates—function templates and class templates2: Here is a function template: template &lt;typename scalar_t&gt; scalar_t sq(const scalar_t& x) { return...

    C++类模板与模板类深入详解

    1、在c++的Template中很多地方都用到了typename与class这两个关键字,而且有时候二者可以替换,那么是不是这两个关键字完全一样呢? 事实上class用于定义类,在...在模板定义语法中关键字class与typename的作用完全一

    详解C++ 模板编程

    类型模板 类型模板包括函数模板和类模板,基本上是C++开发人员接触...类型模板以template开始声明,尖括号内的typename关键字可用class替代。类型模板中typename和class具有相同含义,均表示参数类型。实践中typename

    轻松学习c++&C++典型例题

    template&lt;typename T&gt;class Stack{ int top; //栈顶指针(下标) T *elements; //动态建立的数值 int maxSize; //栈最大允纳的元素个数 public: Stack(int=20); //栈如不指定大小,设为20元素 ~Stack(){delete...

    C++语言学习,代码练习.rar

    template《typename T》 class MyQueue { public: MyQueue(){ front=0; rear=0; } void push(T x) { a=x; rear=(rear+1)%M; }; T pop() { T t=a; front = (front+1)%M; return t; };

    用c++类模板,实现的单链表基本操作

    template&lt;typename T&gt; struct LNode { T data; LNode&lt;T&gt; *next; }; template&lt;typename T&gt; class LinkList { public: LinkList(){L = 0;}//构造函数 ~LinkList();//析构函数,销毁单链表 void CreateList_L(int n)...

    在c++中实现属性

    在C++中实现属性 本文译自http://www.codeguru.com/cpp_mfc/Property.html的Implementing a Property in C++ 以下是译文 本文由Emad Barsoum投稿。 开发测试环境:Visual C++ 7.0, Windows XP sp1, Windows 2000...

    新手学习C++入门资料

    这些关键字能作为函数和变量的标识符在C程序中使用,尽管C++包含了所有的C,但显然没有任何C++编译器能编译这样的C程序。 C程序员可以省略函数原型,而C++不可以,一个不带参数的C函数原型必须把void写出来。而C++...

    在C++中侦测内嵌型别的存在.doc

    在C++中侦测内嵌型别的存在 动机(Motivation) 假设一所大学的注册系统提供了一个注册函数: template&lt;class T&gt; void Register(T person) { Register(person,typename T::person_tag()); }; 而对于注册者有以下...

    C++ 模板函数

    也可以使用class关键字来代替typename,但是推荐使用template。 模板函数的形式如下,一个可以比较大小的函数模板 #include template T max(T a, T b) { return a &gt; b ? a : b; } int main() { std::cout &lt;&lt...

Global site tag (gtag.js) - Google Analytics