如何在 boost::coroutine 中正确使用 class 成员函数?

How to properly use a class member function with boost::coroutine?

我目前正在与 boost::asymmetric_coroutine 合作。假设我们在全局命名空间中有一个普通函数:

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

在这种情况下,我们可以按以下方式使用此函数创建并执行协程:

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

我需要做的是以同样的方式使用一个class成员函数。据我了解,应该以某种方式使用 boost::bind,但是,以下代码不起作用:

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
    }
}

它引发的错误是

no matching function to call to 'get_pointer(const boost::coroutines::push_coroutine&)'

我该如何正确操作?

应该是

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

注意this,因为你使用了成员函数。