EffectiveC++条款35部分代码理解
p172页的typedef和函数指针(function pointer)
文中有这样一段代码
typedef int (*HealthCalcFunc)(const GameCharacter&);
首先理解typedef的用法:
参考typedef的用法,C语言typedef详解
当然里面并没有提到type和函数指针的情况,实际上typedef的作用是
连接名字和类型,具体一点就是将一种类型和一个你自己取的名字连接起来,能够用名字替代类型。
举个例子
typedef int myinteger;//为基本数据类型定义新的类型名
typedef char *mystring;//为指针定义简洁的名字
那么在使用时就可以把int
类型替换为mtinteger
,把char*
替换为mystring
函数指针也是指针,只是指向的是函数而非对象,比如
bool LengthCompare(const string &,const string &)
声明一个指向该函数的函数指针,只需要用指针特换函数名即可
bool (*pf)(const string&, const string&);//未初始化
声明了一个函数指针,这个指针指向的是这么一个函数:返回值是bool类型,接受的参数是const string&和const string&.
在这个函数指针声明前添加typedef
,那么就把这个函数指针类型和pf这个你自己定义的名字连接到了一起。
将书中的下一行代码和简单的代码int*
的typedef
进行一个对比
typedef int* mystring;
mystring a;//定义int*类型的对象a
typedef int (*HealthCalcFunc)(const GameCharacter&);
HealthCalcFunc hcf = defaultHealthCalc//定义HealthCalcFunc类型的函数指针hcf,并赋值初始化
函数名实际上也是函数指针,相当于指针赋值。
针对函数指针的typedef
和对其他类型的不太一样,因为把类型和名字写在一个语句里了。C++11版本里提出了另一种用法
using HealthCalcFunc = int(*)(const string&, const string&)
参考链接
[1]Typedef function pointer?
[2]谁能帮我解释一下C++中typedef的用法
[3]函数指针