3

我目前正在与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&)'

我该如何正确地做到这一点?

4

1 回答 1

4

它应该是

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

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

于 2015-08-12T07:01:05.497 回答