Cómo hacer que una devolución de llamada cambie una variable de una clase sin utilizar una variable global?
Tengo una función que toma otra función como una devolución de llamada, pero necesito que la devolución de llamada sea parte de una clase como un método no estático, porque tengo que cambiar una variable específica con la devolución de llamada.
El problema es que la función setCallback()
no quiere una función de método sino una función normal y estática.
Entiendo que la función setCallback()
no puede simplemente usar la función de la clase tal cual está, ya que no sabe a qué objeto llamar y la sintaxis para las clases es diferente. Sé que también podría resolver esto con una variable global, pero realmente no quiero tener que usarlas y me han dicho que es posible hacer cualquier cosa sin globales.
Nota: la función setCallback()
es de una biblioteca y no tengo forma de cambiarla.
header.h
class myClass
{
int classVariable;
myClass();
callbackFunction(int callbackVariable);
};
source.cpp
myClass::myClass()
{
library::setCallback(this->callbackFunction); // ???
}
myClass::callbackFunction(int callbackVariable)
{
classVariable = callbackVariable;
}
donde 'setCallback()' se ve así:
library::setCallback(void (*)(int callbackVariable));
Edición:
Resulta que había una solución específica de la biblioteca para esto
davy.ai
Para pasar un método de clase como devolución de llamada a la función
setCallback()
, puedes utilizar una combinación de un método estático y un puntero estático a la instancia de la clase. Aquí te mostramos cómo puedes modificar tu código:header.h
source.cpp
Con esta modificación, la función
setCallback()
recibirá un método estático que tiene acceso a la instancia de la clase a través del puntero estático. Cuando la biblioteca invoque la devolución de llamada, podrá utilizar el puntero estático para modificar laclassVariable
de la instancia de clase correspondiente.