Использование функции-члена класса в качестве обратного вызова - PullRequest
6 голосов
/ 13 августа 2010

В привязках PortAudio C ++ есть конструктор MemFunCallBackStream, который можно вызвать как:

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

, где последний параметр - функция обратного вызова.Однако без использования оператора & на этом параметре компилятор завершается ошибкой.Но, насколько я знаю, & параметр не указан при получении адреса функций для использования в указателях функций.Это как-то отличается от функции обратного вызова C и ptr.чтобы функционировать.Синтаксис

Ответы [ 2 ]

6 голосов
/ 13 августа 2010

Этот FAQ , кажется, предполагает, что вы можете опустить & (по крайней мере, для статических функций-членов), но затем приводите различные причины, почему вы не должны• путать обычные указатели на функции с указателями на функции-члены C ++.

EDIT : здесь найдена дополнительная информация , относящаяся к нестатическим функциям-членам:1012 *

Некоторые компиляторы (прежде всего MSVC 6 и 7) позволят вам опустить &, даже если это нестандартно и сбивает с толку.Для более совместимых со стандартами компиляторов (например, GNU G ++ и MSVC 8 (он же VS 2005)) требуется , поэтому вы должны обязательно его вставить. Чтобы вызвать указатель на функцию-член, вам нужно предоставить экземплярSomeClass, и вы должны использовать специальный оператор ->*.Этот оператор имеет низкий приоритет, поэтому вам нужно поместить его в скобки. [Акцент добавлен]

2 голосов
/ 13 августа 2010

Стандарт C ++ в своем разделе об унарных операторах утверждает, что указатель на член требует явного использования &.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...