如何在 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
,因为你使用了成员函数。
我目前正在与 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
,因为你使用了成员函数。