Tengo el siguiente:Especificación de una función miembro como una devolución de llamada en C++ 11
typedef std::function<bool (const std::string&)> SomethingCoolCb;
class ClassA
{
public:
void OnSomethingCool(const SomethingCoolCb& cb)
{
_cb = cb;
}
private:
SomethingCoolCb _cb;
};
class ClassB
{
public:
ClassB();
bool Juggle(const std::string& arg);
private:
ClassA _obj;
};
y quiero especificar la función de miembro de ClassB :: Malabares() como la devolución de llamada a ClassB :: _ obj. Sería la forma correcta de hacer que en C++ 11 sea (en el constructor del ClassB):
ClassB::ClassB()
{
_obj.OnDoSomethingCool(
[&](const std::string& arg) -> bool
{
return Juggle(arg);
});
}
Por lo que entiendo, el compilador hará que un objeto std :: función del código de lambda anteriormente. Entonces, cuando se invoque la devolución de llamada, llamará al miembro std :: function :: operator() y luego invocará ClassB :: Juggle() en lugar de invocar ClassB :: Juggle() directamente. A menos que me equivoque sobre lo que sucede bajo las sábanas, todo parece ser un poco ineficiente. ¿Hay una mejor manera?
Tenga en cuenta que capturar 'this' en una lambda (como en su ejemplo) no funciona bien con Visual Studio 2010. –