使用类成员函数作为回调

时间:2010-08-13 10:16:36

标签: c++ callback

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

portaudio::MemFunCallbackStream<MyClass> streamRecord(paramsRecord, 
                                                     *AnInstanceOfMyClass,
                                                     &MyClass::MemberFunction);

其中last参数是回调函数。但是没有使用&amp;该参数编译器上的运算符失败。但据我所知&amp;获取函数指针中使用的函数的地址时,参数是可以省略的。这与C回调函数和ptr有什么不同。到了。语法?

2 个答案:

答案 0 :(得分:6)

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

编辑:找到了与非静态成员函数相关的更多信息here

  

一些编译器(最值得注意的是MSVC 6   7)会让你省略 &,甚至   虽然它是非标准和   混乱。更符合标准   编译器(例如,GNU G ++和MSVC 8   (a.k.a. VS 2005))要求,所以你   一定要把它放进去。要调用   你需要的是成员函数指针   提供SomeClass的实例,   你必须使用特殊操作员   ->*。此运算符的优先级较低,因此您需要将其放入   括弧。 [强调添加]

答案 1 :(得分:2)

C ++标准在其关于一元运算符的部分中指出,指向成员的指针需要明确使用&amp;。