美文网首页
typedef和typename

typedef和typename

作者: 棉花糖7 | 来源:发表于2020-06-29 10:54 被阅读0次

一、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 <typename T>

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 T>

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 T>

class MyClass

{    public:

         typedef typename T::SubType A;

    public:

            A a;

    public:

        //默认构造函数

        MyClass() { a =10;}

        void PrintNum() { cout<<"a= "<<endl;}

};

class Q

{    public:

        //指定类Q中SubType类型

        typedef int SubType;

};

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

{

//自定义模板, typedef、typename综合运用

MyClass<Q> object;//实例类模板

object.PrintNum();

return 0;

}

转自

相关文章

网友评论

      本文标题:typedef和typename

      本文链接:https://www.haomeiwen.com/subject/dgfofktx.html