`
xinklabi
  • 浏览: 1586789 次
  • 性别: 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

    虽然在模板参数列表中,`typename`和`class`可以互换使用,但它们在某些特定情境下有微妙的区别: - 在非模板上下文中,`class`用于声明类,而`typename`不存在。 - 在模板实例化后,`class`关键字的声明会被解析为...

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

    在C++模板编程中,`class`和`typename`关键字都用于声明模板参数,但在特定情况下,它们之间存在微妙的差异。首先,我们要明确一点,那就是在声明模板参数时,`class`和`typename`是等价的。例如: ```cpp template...

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

    下面详细解释`typename`关键字在C++模板中的用法。 首先,让我们解释模板的基本概念。在C++中,模板的声明通常会以关键字`template`开始,后面跟着一个或多个模板参数列表,模板参数可以是类型参数,也可以是非类型...

    C++ 常用关键字

    10. template:template是C++中的一种关键字,用于声明一个模板。例如,`template &lt;typename T&gt; class A { ...; };`这里声明了一个名为A的模板。 11. throw:throw是C++中的一种关键字,用于抛出一个异常。例如,`...

    Why C++ Supports typename and class.txt

    为了解决`class`关键字在模板上下文中可能引起的混淆,C++标准委员会在后续版本的标准中引入了`typename`关键字,专门用于模板参数的声明。`typename`的引入不仅提供了清晰性,还增强了C++的可读性和可维护性。现在...

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

    在C++编程语言中,`typename` 和 `class` 关键字在模板(template)上下文中有相似但不完全相同的意义。尽管它们在定义模板时可以互换使用,但它们在处理依赖类型(dependent types)时有着显著的区别。让我们深入...

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

    在C++模板编程中,`class`和`typename`关键字看似可以互换,但实际上它们在特定情况下有着重要的区别。在声明模板时,`class`和`typename`都可以用来指定模板参数,但涉及到从属类型(dependent type)时,两者的...

    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++ 类模板和模板类的深入解析

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

    C++ Template

    模板参数包括类型参数(`typename`或`class`关键字指定)和非类型参数(通常为整型或指针)。类型参数用于表示任意类型,非类型参数可以是具体的值。例如: ```cpp template &lt;typename T, int N&gt; T arrayProduct(T ...

    C++Template电子书及代码

    - 类型参数:在模板声明中,`typename`或`class`关键字后的标识符是类型参数,例如`T`。在实例化模板时,我们可以用实际的类型来替换这些类型参数,如`max(3, 5)`。 - 非类型参数:除了类型参数外,还可以有非类型...

    C++Template

    侯捷老师的《C++Template》一书深入浅出地介绍了C++模板的各个方面,包括基础概念、高级技巧以及实际应用,对于理解和掌握C++模板编程有着极大的帮助。通过阅读这本书,开发者可以更好地利用模板这一强大的工具,...

    C++ template 中文版

    例如,`template&lt;typename Key, typename Value&gt; class Map` 定义了一个键值对映射容器的模板,可以实例化为`Map, string&gt;`或`Map, double&gt;`等。 3. **模板参数** 模板参数可以是类型参数(如`T`)和非类型参数...

    编程中国-C++箴言:理解typename的两个含义.txt

    在深入探讨C++中`typename`关键字的双层含义之前,我们先来简要回顾一下C++模板的基础知识。模板是C++的一项强大特性,它允许程序员编写泛型代码,即能够处理不同类型数据的代码。这极大地提高了代码的重用性和灵活...

    C++关键字typename的深入理解

    在C++编程语言中,`typename`关键字是一个非常重要的元素,尤其在模板(template)编程中扮演着关键角色。本文将深入探讨`typename`的作用、使用场景及其与`class`关键字的区别。 首先,`typename`和`class`在声明...

    example of c++ template

    例如,`template&lt;typename T&gt; class Stack { ... }`,这可以创建一个可以存储不同类型元素的栈。 2. **模板参数**: - **类型参数**(如`T`):代表任意数据类型,在实例化时会被具体的数据类型替换。 - **非类型...

Global site tag (gtag.js) - Google Analytics