1.定义一种类型的别名,而不只是简单的宏替换。
例子:
typedef unsigned char uint_8;
typedef char int_8;
typedef std::shared_ptr<Table> TablePtrType;
2.用在旧的C的代码中(具体多旧没有查),帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名 对象名,如:
struct tagPOINT1
{
int x;
int y;
};
struct tagPOINT1 p1;
而在C++中,则可以直接写:结构名 对象名,即:
tagPOINT1 p1;
经常多写一个struct太麻烦了,于是就发明了:
typedef struct tagPOINT
{
int x;
int y;
}POINT;
POINT p1; // 这样就比原来的方式少写了一个struct,比较省事,尤其在大量使用的时候
或许在C++中,typedef的这种用途二不是很大,但是理解了它,对掌握以前的旧代码还是有帮助的,毕竟在项目中有可能会遇到较早些年代遗留下来的代码。
3.用typedef来定义与平台无关的类型。
比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:
typedef long double REAL;
在不支持 long double 的平台二上,改为:
typedef double REAL;
在连 double 都不支持的平台三上,改为:
typedef float REAL;
也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。
标准库就广泛使用了这个技巧,比如size_t。
4.为复杂的声明定义一个新的简单的别名。这个写法上要注意下:
// 函数返回值类型 (* 指针变量名) (函数参数列表); void add(); void (*p)()=add;
// void (*p)() 声明一个指向函数的指针
// 这里直接把原有的变量名字 p写成 新的类型名字 callback就可以了,前面三个的写法都是
不删除原来的命名,而是再写一个新的名字,这里稍有不同。
typedef void(*callback)() ;
callback zhc;