C++回调函数

    1、问题提出

    在OpenGL中,有auxInitPosition(int , int , int , int);用来初始化窗口大小,它最初的定义是void auxInitPosition(GLint x,GLint y,GLsizei width,GLsizei height) ,这个可以用VC Tools中的工具Depends来查看,其结果如下:

 

 

    回调函数的代码如下:

    main()

{

    auxInitPosition(100,100,800,600);

    auxReshapeFunc(myreshape);//void CALLBACK myreshape(GLsizei width,GLsizei height);/

    void auxReshapeFunc(void(*function)(GLsizei,GLsizei))

}

    在myreshape(GLsizei width,GLsizei height)中,形参width、height已经不需要直接传实参,即auxReshapeFunc(myreshape(12,12)),其实这是错的调用方式。形参的传递在auxReshapeFunc()函数就实现了。

    2、问题探究

    先来看看函数指针,

    格式:数据类型标识符 (指针变量名)(形参列表)

    void fun(int x,int y)

    void (*pfun)(int ,int )

    测试程序:

   

    还可定义函数指针数据类型:typedef void (*pfun)(int , int);pfun prtfun;//编译也可通过

    从这里,可以看出函数名就是代表着指针。

    为此,可编写如下测试程序:

   

   在(callproc call)中call为函数的入口地址,(*call)也可更改为call。

     再来看看C++类中如何去实现这样的一个回调函数:

    

   

    3、问题总结  

     1>函数名代表函数指针

     2>函数指针的声明方式:void (*pfun)(int ,int )

     3>函数指针类型声明:typedef void (__stdcall *pfun)(int ,int)

     4>调用方式声明:void __stdcall fun(int x, int y)

     5>static成员函数属于类,类名::函数名调用,外部定义不能用static修饰

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值