声明函数指针并实现回调[VC/C++编程]
本文“声明函数指针并实现回调[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
程序员常常需求实现回调.本文将谈论函数指针的基本原则并阐明若何利用函数指针实现回调.注意这里针对的是普通的函数,不包含完好依靠于差别语法和语义法则的类成员函数(类成员指针将在另文中谈论).
声明函数指针
回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用.要实现回调,必须首先定义函数指针.固然定义的语法有点难以想象,但假如你熟习函数声明的普通办法,便会发现函数指针的声明与函数声明非常近似.请看下面的例子:
void f();// 函数原型
上面的语句声明了一个函数,没有输入参数并返回void.那么函数指针的声明办法以下:
void (*) ();
让我们来解析一下,左边圆括弧中的星号是函数指针声明的关键.别的两个元素是函数的返回范例(void)和由边圆括弧中的进口参数(本例中参数是空).注意本例中还没有成立指针变量-只是声明了变量范例.目前可以用这个变量范例来成立范例定义名及用sizeof表达式得到函数指针的大小:
// 得到函数指针的大小
unsigned psize = sizeof (void (*) ());
// 为函数指针声明范例定义
typedef void (*pfv) ();
pfv是一个函数指针,它指向的函数没有输入参数,返回类行为void.利用这个范例定义名可以躲藏复杂的函数指针语法.
指针变量应当有一个变量名:
void (*p) (); //p是指向某函数的指针
p是指向某函数的指针,该函数无输入参数,返回值的范例为void.左边圆括弧里星号后的就是指针变量名.有了指针变量便可以赋值,值的内容是签名匹配的函数名和返回范例.比方:
void func()
{
/* do something */
}
p = func;
p的赋值可以差别,但一定如果函数的地址,并且签名和返回范例相同.
传送回调函数的地址给调用者
目前可以将p传送给另一个函数(调用者)- caller(),它将调用p指向的函数,而此函数名是未知的:
void caller(void(*ptr)())
{
ptr(); /* 调用ptr指向的函数 */
}
void func();
int main()
{
p = func;
caller(p); /* 传送函数地址到调用者 */
}
假如赋了差别的值给p(差别函数地址),那么调用者将调用差别地址的函数.赋值可以发生在运行时,这样使你能实现动态绑定.
以上是“声明函数指针并实现回调[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:<b>C++函数的可变参数详谈</b>
- ·下一篇文章:CString操作指南
- ·中查找“声明函数指针并实现回调”更多相关内容
- ·中查找“声明函数指针并实现回调”更多相关内容