typedef和typename区别

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、typedef

用法:typedef 内置类型别名

关键字typedef对内置类型、类类型等进行重命名,使用重命名的类型,在使用上更加方便、简洁,特别注意:用typedef不会新增类型。

实例一:

//typedef 简单例子

typedef unsigned short Word; //对unsigned short内置类型进行重命名

Word wClickNum = 10; //用用户定义的新名字定义变量等同于unsigned short wClickNum

实例二:

//普通方式:定义结构体类型与变量

struct tag_Student

{

string strName;

unsigned short usMathResult;

};

struct tag_Student stStudent1;

//使用typedef可以使结构体定义更简洁

typedef struct

{

string strName;

unsigned short usMathResult;

}stStudent;

stStudent stPerson;//定义变量更加简洁

二、typename

用法:

关键字typename用来作为型别之前的标识符,主要应用在函数模板、类模板中,在template中也可以用class来声明。

函数模板:

我们可以定义一个通用的函数模板,而不是为每个类型都定义一个新函数,一个函数模板就是一个公式,可以生成特性类型的函数版本。

实例三

template

int Compare(const T& V1, const T& V2)

{ if (V1 < V2) { return -1;}

else if (V1 > V2) { return 1;}

else{ return 0; }

}

int _tmain(int argc, _TCHAR* argv[])

{

//调用一个函数模板时,通用编译器根据函数模板的实参来为我们推导T的类型

int nRet1 = Compare(10, 11); //实例化函数模板,T为int类型

int nRet2 = Compare(9.1, 9.8);//实例化函数模板,T为float 类型

return 0;

}

综合应用

代码如下:

template

class MyClass

{

public:

typedef typename T::SubType A;

public:

A a;

}

typedef typename T::SubType A;的含义是:A是某个类中的SubType类型,通过typedef来修饰,A为SubType类型的别名。typename是型别标识符。

特别的,如果有typename T::SubType *A语句中没有typename 修饰,该语句将被翻译成:SubType 与ptr的乘积,编译将会出错。”::“表示域标识符。

实例四

template

class MyClass

{ public:

typedef typename T::SubType A;

public:

A a;

public:

//默认构造函数

MyClass() { a =10;}

void PrintNum() { cout<<"a= "<

class Q

{ public:

//指定类Q中SubType类型

typedef int SubType;

};

int _tmain(int argc, _TCHAR* argv[])

{

//自定义模板, typedef、typename综合运用MyClass object;//实例类模板object.PrintNum();

return 0;}

相关文档
最新文档