如何正确使用boost :: coroutine的类成员函数?

时间:2015-08-12 06:40:26

标签: c++ boost boost-bind 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};

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

它引发的错误是

  

没有匹配函数可以调用&#39; get_pointer(const boost :: coroutines :: push_coroutine&amp;)&#39;

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

1 个答案:

答案 0 :(得分:2)

应该是

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

note this,因为您使用了成员函数。