C++学习14:使用typedef定义函数指针类型 傻大头 2020-05-13 1,452 阅读1分钟 typedef可以用于定义函数指针类型:【语法】typedef <返回类型> (*<函数类型名>)(参数表)typedef <返回类型> (<类名>::*<函数类型名>)(参数表)【用途】1、可以用来定义该函数类型的函数指针,就不用每次使用函数指针都要写一次函数原型了;2、有了类型名,就可以使用在容器里面,譬如map<int, 类型名>,用于实现灵活的函数调用。【示例】例1:typedef void (*PF)(int x);void func1(int x){ cout<<"func1:"<<x<<endl;}void func2(int x){ cout<<"func2:"<<x<<endl;}void main(){ PF pFunc; //声明一个函数指针只需要用PF类型名 pFunc = func1; //此处也可以使用pFunc = &func1; pFunc(38); pFunc = func2; pFunc(99);}-----------------------------------------------------------------------------------------------例2:class CUtil{public: CUtil(); typedef void (CUtil::*pUFunc)(int); //定义原型为void CUtil::func(int)的函数指针的别名为pUFunc map<int, pUFunc> funcMap; //可以用做map容器的元素类型 void laner(int x); void execute();};CUtil::CUtil(){ funcMap[0] = &CUtil::laner; //这里初始化map容器,关联数字0和函数laner}void CUtil::laner(int x){ cout<<"laner:"<<x<<endl;}void CUtil::execute(){ (this->*funcMap[0])(38); //调用map[0]关联的函数 //注意1:这里必须使用this->,否则会有error C2171: “*”: “void (__thiscall CUtil::* )(int)”类型的操作 数非法的错误 //注意2:这里必须使用*解引用,才能实现函数调用,否则会有error C2064: 项不会计算为接受 1 个参数的函数的错误}void main(){ CUtil pUtil = new CUtil(); pUtil->execute(); (pUtil->*(pUtil->funcMap[0]))(38); //与上一句等效,注意括号要用正确}