天天看点

C/C++ typedef关键字的几种简单用法

typedef 在C/C++ 是用来重命名的关键字。现在我就简单的总结一下typedef的用法及几种常见的简单用处。

  1. 当你不想用极长的一段代码来定义一个数据类型是,可用此来重新命名,如下:
typedef std::map<strCarIndex, STRU_TrafficCarData> MapCarID2CarData
           

以此方式,后面在遍历查找增加删除等操作时便方便了许多。

MapCarID2CarData::iterator it = g_mapCarID2Data.begin();
           
  1. 结构体的typedef

    在C/C++ 中,特别是C语言中,结构体的定义时typedef非常广泛

typedef struct _CARATTR
{
	int m_nColor;
	int m_nBrand;
	string m_strCarNo;
}CARATTR, *pCARATTR;
CARATTR struCar1;
pCARATTR pStrCar2;
           

这样定义,则CARATTR表示struct _CARATTR的类型,pStrCar2表示CARATTR*类型。建议可以不用typedef一个结构体的指针,后者定义的清楚一些,不然后面有可能会重定义混淆。

另外,这种方式仅限于C语言,C++似乎并不需要这样加一个typedef这样做。

3. 函数指针的定义,特别用于回调函数与导出函数

作为初学者,也许这个是有一点难理解。

回调函数,按照我的理解,另一个线程中需要执行的函数或方法,只是函数体的代码实现在本线程中。例如:一个车辆扫描器,一直在循环的工作,查找是否当前范围内有车辆进过。这就是一个线程。当有车辆进过时,在此线程中执行一个动作。这个动作是什么呢?便是我们调用者传过去的一个函数地址。此函数地址指向我们的程序的一个函数。这就是所谓的“函数体的代码实现在本线程中”。后续再总结回调函数使用

在传入函数地址时,在两个线程中都要定义此函数类型。定义方式如下:

typedef typename(*Func)(typename1, typename2, ...);
           

第一个typename函数返回类型,后面的typename1, typename2表示函数的参数类型。

导出函数的使用方法也是同样的。