04typename关键字

typename 关键字

两种用法!

用法一

用在模板定义里,标名其后的模板参数是类型参数此时与class可互换

template <typename T> //与class可互换
class A
{
    public:
};

用法二

模板中标明“内嵌依赖类型名”!

#include <iostream>
using namespace std;

template <typename T>
class A
{
    public:
    //typename 指出下面紧跟着的名称是一个类型
    typename T::iterator * iter;
    //必须有typename ,不然歧义
};

class B
{
    public:
    typedef int iterator;//内嵌类型
};

void main()
{
    //模板类
    A<B> a;
    cout<<typeid(a.iter).name()<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 C++ ,`typename` 关键字的主要作用是告诉编译器其后面的符号是一个类型名称(type name),而不是一个值(value),以避免编译器的歧义。具体来说,`typename` 关键字可以用于以下两种情况: 1. 在模板使用嵌套类型时,需要使用 `typename` 关键字来告诉编译器其后面的符号是一个类型名称,而不是一个静态成员变量或函数。 例如,假设有以下的模板类: ``` template <typename T> class MyClass { public: typedef T value_type; ... }; ``` 如果在模板类的成员函数使用 `value_type`,需要使用 `typename` 关键字告诉编译器其后面的符号是一个类型名称: ``` template <typename T> void MyClass<T>::foo() { typename MyClass<T>::value_type x; // 使用typename关键字 ... } ``` 2. 在使用模板时,需要使用 `typename` 关键字来告诉编译器其后面的符号是一个类型名称,而不是一个静态成员变量或函数。 例如,假设有以下的模板函数: ``` template <typename T> void foo(typename T::value_type x) { ... } ``` 如果在使用该模板函数时,传递的类型 `T` 有一个名为 `value_type` 的嵌套类型,需要使用 `typename` 关键字告诉编译器其后面的符号是一个类型名称: ``` struct MyStruct { typedef int value_type; }; int main() { MyStruct s; foo<MyStruct>(s); // 使用typename关键字 ... } ``` 总之,`typename` 关键字的作用是告诉编译器其后面的符号是一个类型名称,以避免编译器的歧义。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值