c++ - microsoft - visual studio installer
boost:: bind con funciones que tienen parámetros que son referencias (2)
Observé que al pasar los parámetros de referencia para impulsar el enlace, esos parámetros no actuarán como referencias. En cambio, boost crea otra copia del miembro y el original pasado en variable permanece sin cambios.
Cuando cambio las referencias a los punteros, todo funciona bien.
Mi pregunta es:
¿Es posible obtener referencias de trabajo o, al menos, dar un error de compilación cuando intenta usar parámetros de referencia?
La documentación de impulso para bind sugiere que puede usar boost :: ref y boost :: cref para esto.
Me encontré con un problema similar esperando que se pasara un parámetro de vinculación por referencia cada vez que se declarara que el método utilizado en el enlace tomaba un parámetro de referencia. ¡Sin embargo, éste no es el caso! Tendrá que ajustar explícitamente el parámetro de vinculación (que se debe pasar por referencia) en un boost :: ref () o boost :: cref () independientemente de cómo se declara el método.
Ejemplo:
ClassA myClassAParameter
void Method(ClassA ¶m);
ahora, el siguiente enlace:
callback = boost::bind(&Method, myClassAParameter);
en realidad hará una COPIA del objeto ClassA (que entiendo que es una asignación temporal y el método llamado no debe mantener una referencia porque no es la referencia del objeto real sino una copia del objeto).
sin embargo, el siguiente enlace:
callback = boost::bind(&Method, boost::ref(myClassAParameter));
no hará una copia, pero usa una referencia para crear el objeto de vinculación.