如何正确使用boost::协程类成员函数

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

本文关键字:程类 成员 函数 boost 何正确      更新时间:2023-10-16

我目前正在与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};

我需要做的是以同样的方式使用类成员函数。据我所知,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
    }
}

引发的错误是

没有对应的函数调用'get_pointer(const boost::coroutines::push_coroutine&)'

我该如何正确地做这件事?

应该是

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

注意this,因为你使用的是成员函数