使用类成员函数作为回调函数

6
在PortAudio的C++绑定中,存在一个MemFunCallBackStream构造函数,可以按照以下方式进行调用:
portaudio::MemFunCallbackStream<MyClass> streamRecord(paramsRecord, 
                                                     *AnInstanceOfMyClass,
                                                     &MyClass::MemberFunction);

在这里,最后一个参数是回调函数。但是,如果没有在该参数上使用&运算符,则编译器会失败。但据我所知,在获取用于函数指针中的函数地址时,可以省略&参数。这与C回调函数和函数指针语法有何不同?

2个回答

6
这个FAQ似乎表明,对于静态成员函数,您可以省略&,但随后又给出了各种理由,说明您不应该混淆普通函数指针和C++成员函数指针。 编辑:在这里找到了更多信息,与非静态成员函数相关:

某些编译器(尤其是MSVC 6和7)将允许您省略&,即使它是非标准的和令人困惑的。更符合标准的编译器(例如GNU G++和MSVC 8(也称为VS 2005))需要它,因此您一定要加上它。要调用成员函数指针,您需要提供SomeClass的实例,并且必须使用特殊运算符->*。该运算符具有较低的优先级,因此您需要将其放在括号中。 [强调添加]


2
在C++标准中的一元运算符部分规定,指向成员的指针需要显式使用 & 符号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接