在PortAudio的C ++绑定中,有一个MemFunCallBackStream构造函数可以被称为:
portaudio::MemFunCallbackStream<MyClass> streamRecord(paramsRecord,
*AnInstanceOfMyClass,
&MyClass::MemberFunction);
其中last参数是回调函数。但是没有使用&amp;该参数编译器上的运算符失败。但据我所知&amp;获取函数指针中使用的函数的地址时,参数是可以省略的。这与C回调函数和ptr有什么不同。到了。语法?
答案 0 :(得分:6)
This FAQ似乎暗示你可以省略&
(对于静态成员函数,至少),但接下来会给出为什么你不应该给出的各种理由t将普通函数指针与C ++成员函数指针混淆。
编辑:找到了与非静态成员函数相关的更多信息here:
一些编译器(最值得注意的是MSVC 6 7)会让你省略
&
,甚至 虽然它是非标准和 混乱。更符合标准 编译器(例如,GNU G ++和MSVC 8 (a.k.a. VS 2005))要求,所以你 一定要把它放进去。要调用 你需要的是成员函数指针 提供SomeClass的实例, 你必须使用特殊操作员->*
。此运算符的优先级较低,因此您需要将其放入 括弧。 [强调添加]
答案 1 :(得分:2)
C ++标准在其关于一元运算符的部分中指出,指向成员的指针需要明确使用&amp;。