关键字typename的使用

本文详细介绍了C++中typename关键字的使用方法,包括如何使用typename来标识模板中的类型名称,以及typename与class关键字的区别。并通过实例展示了typename在模板编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键字typename的使用
    1.
关键字typename被用来作为类型之前的标志符号。例如:
      template<class T>
      class MyClass
      {
         typename T::SubType * ptr;
         ……
      };
   
这里,typename指出SubTypeclass T中定义的一个类型,因此ptr是一个指向T::SubType类型的指针。如果没有关键字typenameSubType会被当成一个static成员,于是:
      T::SubType * ptr;
   
会被解释为类型T内的数值SubTypeptr的乘积。
    SubType
成为一个类型的条件是,任何一个用来取代T的类型,其内部都必须提供一个内部类型SubType的定义。例如:将型别Q当作template参数:
      MyClass<Q> x;
   
必要条件类型Q中有如下的内部类型定义:
      class Q
      {
         typename int SubType;
         ……
      };
   
此时,MyClass<Q>ptr成员变成了一个指向int类型的指针。子类型也可以为自定义数据类型(例如class):
      class Q
      {
         class SubType;
         ……
      };
   
注意,如果要把一个template中的某个标志符指定为一种类型,就算意图显而易见,关键字typename也不可或缺。因此C++一般的规则是,除了以typename修饰的之外,template内的任何标志符都被视为一个值,而不是一个类型。
    2.
在模板中代替class
   
在写一个模板函数或者模板类时,常常第一句写为template<class T>,这里的将T定义为任意数据类型,在函数被调用时由调用者指定。这个类型由class引导,但型别本身不一定是class——任何数据类型只要提供template定义式所拥有的操作,都可适用此模板。class的使用原是为了避免增加新的关键字,然而最终还是不得不引入了一个新的关键字typename,此处也可以使用typename
   
因此,上述例子可以写为:
      template<typename T>
      class MyClass
      {
         ……
      };
   
这里主要说明了typename的使用方法。
   
参考: The Standard Library 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值