/ / ¿Cómo usar correctamente una función miembro de clase con boost :: coroutine? - c ++, boost, boost-bind, boost-coroutine

¿Cómo usar correctamente una función miembro de clase con boost :: coroutine? - c ++, boost, boost-bind, boost-coroutine

Actualmente estoy trabajando con boost::asymmetric_coroutine. Digamos que tenemos una función ordinaria en el espacio de nombres global:

void foo(boost::coroutines::asymmetric_coroutine<int>::push_type & sink)
{
//do something
sink(100);
//do something else
}

En ese caso, podemos crear y ejecutar una rutina utilizando esta función de la siguiente manera:

boost::coroutines::asymmetric_coroutine<void>::pull_type coro{foo};

Lo que necesito hacer es usar una función miembro de la clase de la misma manera. Como yo lo entiendo, boost::bind debe usarse de alguna manera, sin embargo, el siguiente código no funciona:

class MyClass
{
public:
void create_coro()
{
boost::coroutines::asymmetric_coroutine<int>::pull_type coro
{
boost::bind(&MyClass::foo, _1);
};
}

private:
void foo(boost::coroutines::asymmetric_coroutine<int>::push_type & sink)
{
//do something
}
}

El error que plantea es

no hay una función coincidente para llamar a "get_pointer (const boost :: coroutines :: push_coroutine &)"

¿Cómo lo hago correctamente?

Respuestas

2 para la respuesta № 1

Debería ser

    boost::coroutines::asymmetric_coroutine<int>::pull_type coro
{
boost::bind(&MyClass::foo, this, _1);
};

Nota this, ya que usas la función miembro.