使用类成员函数作为回调

pau*_*ons 6 c++ callback

在PortAudio的C++绑定中,有一个MemFunCallBackStream构造函数,可以调用为:

portaudio::MemFunCallbackStream<MyClass> streamRecord(paramsRecord, 
                                                     *AnInstanceOfMyClass,
                                                     &MyClass::MemberFunction);
Run Code Online (Sandbox Code Playgroud)

其中最后一个参数是回调函数.但是,如果不在参数编译器上使用&运算符,则会失败 但据我所知,参数在获取函数指针中使用的函数地址时是可以省略的.这与C回调函数和ptr有什么不同.到了.句法?

Dav*_*vid 6

这个FAQ似乎暗示你可以省略&(对于静态成员函数,至少),但接下来给出了各种原因,为什么你不应该将普通的函数指针与C++成员函数指针混淆.

编辑:在这里找到更多信息,这与非静态成员函数有关:

一些编译器(最明显的是MSVC 6和7)会让你忽略&,即使它是非标准和混乱.更多符合标准的编译器(例如,GNU G ++和MSVC 8(又名VS 2005))需要它,所以你一定要把它放进去.要调用成员函数指针,你需要提供SomeClass的一个实例,你必须使用它特别经营者 ->*.此运算符的优先级较低,因此您需要将其放在括号中.[强调补充]