静态方法作为函数指针

Jen*_*lom 4 c c++ oop

在许多情况下,C框架使用函数指针来扩展功能并通知侦听器(例如win32-api和GLUT).在编写面向对象的C++时,您更喜欢使用类和对象来处理它.所以我的问题是:

使用指向静态方法的指针是否安全,其中C库期望一个函数指针?

Pet*_*ker 11

在形式上,不,你不能这样做,但在实践中,是的.要从C代码中调用,必须标记C++函数extern "C",以确保它使用C编译器期望的调用约定.没有办法将静态成员函数标记为extern "C",因此无法保证可以从C代码成功调用它.我不知道编译器对静态成员函数使用与C代码不同的调用约定,因此这将起作用.有些编译器会针对这种情况发出警告,因为从技术上讲,函数的类型是错误的.实际上,如果你看一下C++标准,那些采用回调的C函数(qsort例如)有两个版本:一个是extern "C"函数,另一个是extern "C++"函数.