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修饰