¿Puede std::function tener un puntero a función como tipo?
Supongamos que tengo el tipo de callback en estilo C como se muestra a continuación. Para C++, podría crear un tipo de std::function
como callback2
, y este tipo de declaración son todos los ejemplos que pude encontrar. Pero en lugar de escribir la firma nuevamente, ¿puedo reutilizar callback
como callback3
a continuación?
Si es posible usar callback3
,
- ¿Cómo puedo llamar al callback? ¿Es
c.target
como se muestra a continuación la forma correcta de llamar al callback?(); - ¿Cómo puedo pasar una función miembro? Para el tipo común, podría usar
worker2([this]() {toBeCalled();});
peroworker3([this]() {toBeCalled();});
no funcionó.
Código
typedef void (*callback)();
typedef std::function callback2;
typedef std::function callback3;
void worker(callback c)
{
c();
}
void worker2(callback2 c)
{
c();
}
void worker3(callback3 c)
{
//¿Es esta la forma de llamar al callback?
c.target();
}
class Caller
{
public: Caller()
{
//worker2([this]() {toBeCalled();});
worker3(????);
}
void toBeCalled()
{
std::cout << "toBeCalled()";
}
};
davy.ai
Sí, es posible reutilizar el tipo
callback
al definir el tipostd::function
. La manera correcta de declararcallback3
sería:Esto define un tipo
std::function
que toma como argumento un tipocallback
.c()
dentro de la funciónworker3
como se muestra a continuación:Aquí,
&toBeCalled
se pasa como argumento ac()
, que es un puntero a la función que se llamará.this
y llame a la función miembro. Aquí tienes un ejemplo:Aquí, se define una función lambda que captura el puntero
this
y llama a la función miembrotoBeCalled()
dentro de la claseCaller
. Esta función lambda se puede pasar a la funciónworker3
como argumento.</void(callback)>