用typedef定义函数指针类型(转)
2014-06-20 17:05
387 查看
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); //与上一句等效,注意括号要用正确
}
【语法】
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); //与上一句等效,注意括号要用正确
}
相关文章推荐
- C++用typedef定义函数指针类型typedef可以用于定义函数指针类型
- 利用typedef定义函数指针类型
- C++------------typedef 函数指针类型定义
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- C++------------typedef 函数指针类型定义
- typedef函数指针与函数类型的定义及使用方式
- (C++)用typedef定义函数指针类型
- C++学习14:使用typedef定义函数指针类型
- Nginx阅读: typedef定义函数指针类型
- typedef函数指针与函数类型的定义及使用方式
- typedef int (* func)(int ,int ) 定义函数指针类型 的理解
- GetProcAddress 省略转换(即省略typedef定义函数类型)
- typedef 定义函数类型
- 定义指向模板函数的函数指针类型
- 定义一个函数指针类型comm_callback
- typedef定义函数指针
- C语言:typedef定义函数指针
- 使用typedef简化函数指针的声明及定义
- typedef函数指针类型和函数类型
- C语言学习6 :指针的定义,指针类型要合法,指针要初始化,指针做函数参数,数组和指针的通用性,指针+1所代表的空间,void * 指针,交换函数中的指针,数组和字符型指针区别,字符型指针的应用,使用指针完成字符操作函数