#include <QtCore/QCoreApplication>
#include <boost/bind.hpp>
#include <boost/function.hpp>
class button
{
public:
boost::function<void()> onClick;
boost::function<void(int ,double)> onClick2;
};
class player
{
public:
void play(int i,double o){}
void stop(){}
};
button playButton, stopButton;
player thePlayer;
void connect()
{
//error C2298: 'return' : illegal operation on pointer to member function expression
playButton.onClick2 = boost::bind(&player::play, &thePlayer);
stopButton.onClick = boost::bind(&player::stop, &thePlayer);
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
connect();
return a.exec();
}
6
A
Respuesta
13
boost::bind(&player::play, &thePlayer)
Es necesario utilizar marcadores de posición para los dos argumentos:
boost::bind(&player::play, &thePlayer, _1, _2)
Los marcadores de posición le permiten decir "Sólo estoy vinculante ciertos argumentos; otros argumentos se proporcionarán más adelante."
2
Y si quieres crear código portable - especificar espacio de nombres de marcadores de posición directamente:
boost::bind(&player::play, &thePlayer, ::_1, ::_2); // Placeholders of boost::bind are placed in global namespace.
Cuestiones relacionadas
- 1. Cómo usar boost :: bind en C++/CLI para vincular un miembro de una clase administrada
- 2. Cómo usar boost Boost con una función de miembro
- 3. Función de miembro de clase como devolución de llamada utilizando boost :: bind and boost :: function
- 4. ¿Puedo usar boost :: enable_if en una función miembro?
- 5. boost :: vinculación y función de miembro de clase
- 6. ¿De qué sirve usar boost :: mem_fn si tenemos boost :: bind?
- 7. cómo boost :: function and boost :: bind work
- 8. ¿Cómo se pasa boost :: bind objects a una función?
- 9. Cómo usar las funciones de lambda con boost :: bind/std :: bind en VC++ 2010?
- 10. ¿Es seguro usar std :: bind con boost :: signals2?
- 11. boost :: bind no compila con la función de plantilla de miembro
- 12. ¿Es posible usar boost :: bind para efectivamente concatenar funciones?
- 13. no se puede usar .bind() para vincular el vuelo estacionario
- 14. Cómo hacer que el miembro de la clase funcione como función de subproceso usando boost
- 15. Cómo usar boost :: bind con params que no se pueden copiar, por ejemplo boost :: promise?
- 16. Boost MPL: Llame a una función (miembro) solo si existe
- 17. Uso de Google Mock con boost :: bind
- 18. boost :: bind with protected members & context
- 19. Cómo forzar la sobrecarga de función de la plantilla para boost :: bind?
- 20. Use Boost para obtener los tipos de arity y paramerter de la función de miembro. (boost :: function_traits)
- 21. ¿Puedo aumentar :: bind() a una función de Objective C?
- 22. ¿Cómo hash y compara una función de puntero a miembro?
- 23. Uso de boost :: bind con un constructor
- 24. ¿Puedo usar una variable miembro como clave para hash_set/hash_map?
- 25. ¿Cómo puedo invocar una función miembro usando notación de corchetes?
- 26. Intentando vincular estáticamente Boost
- 27. Llamando a la definición de la clase base de la función de miembro virtual con el puntero de función
- 28. Cómo crear una función con argumento que sería el resultado de boost :: bind?
- 29. ¿Cuál es la diferencia entre boost :: bind y boost :: lambda :: bind?
- 30. Enchufes Unix: cuándo usar la función bind()?