2010-08-13 18 views
6

En fijaciones de PortAudio C++, hay una constructior MemFunCallBackStream que se puede llamar como:Usando la función de devolución de llamada como miembro de la clase

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

en último parámetro es la función de devolución de llamada. Sin embargo, sin utilizar el operador & en ese parámetro el compilador falla. Pero hasta donde sé, el parámetro & es omitible cuando se obtiene la dirección de las funciones para utilizar en punteros a funciones. ¿Es esto de alguna manera diferente de la función de devolución de llamada C y ptr. a func. ¿sintaxis?

Respuesta

6

This FAQ parece sugerir que puede omitir el& (para las funciones miembro estáticas, por lo menos), pero entonces se enciende dar varias razones por las que no debe confundir ordinarios función triples con C++ miembro-automático- punteros.

EDITAR: Se encuentra más información here, que es relevante para las funciones miembro no estáticas:

algunos compiladores (más notablemente MSVC 6 y 7) le permitirá omite la & , incluso aunque es no estándar y confuso. Más compiladores compatibles con el estándar (por ejemplo, GNU G ++ y MSVC 8 (también conocido como VS 2005)) lo requieren, por lo que definitivamente debe ponerlo en. Para invocar el puntero de función miembro, necesita para proporcionar una instancia de SomeClass, y debe usar el operador especial ->*. Este operador tiene una baja precedencia, por lo que debe colocarlo en el paréntesis . [énfasis añadido]

2

El estándar C++, en su sección sobre los operadores unarios, establece que un miembro de puntero a requiere el uso explícito de &.

Cuestiones relacionadas