c++ - Referencia del funcional a través de una función std::
c++11 std-function (1)
Básicamente, me gustaría tener la siguiente semántica:
#include <functional>
#include <iostream>
class test
{
public:
void add(std::function<void()> f)
{
f();
}
void operator()()
{
++x;
}
int x = 33;
};
int main()
{
test t;
t.add(t);
// wanted: x == 34 instead: x == 33 since add(t) copies it
}
Entiendo que std :: function envuelve una copia del objeto invocable, pero ¿hay alguna forma de obtener una referencia a un objeto invocable usando std :: function?
Desea utilizar la función de plantilla std::ref
para crear un contenedor de referencia para su instancia:
std::reference_wrapper
es una plantilla de clase que envuelve una referencia en un objeto asignable y copiable.Las plantillas de función
ref
ycref
son funciones de ayuda que generan un objeto de tipostd::reference_wrapper
, que utiliza la deducción de argumentos de plantilla para determinar el argumento de plantilla del resultado.
Lo usarías así:
t.add(std::ref(t));