【发布时间】:2014-08-21 06:46:41
【问题描述】:
我正在尝试使用 boost::asio::spawn 协程重写一个项目。项目的某些部分无法更改。比如存储协议库也是用boost::asio写的,但是没有协程。
问题是如何将yield_context 转换为普通回调(boost::function 对象或经典函子)。
这就是我们在存储库 API 中的内容:
void async_request_data(uint64_t item_id, boost::function< void(Request_result *) > callback);
从示例中我们知道,asio yield 上下文可以这样使用:
my_socket.async_read_some(boost::asio::buffer(data), yield);
在这种情况下,boost::asio::yield_context 对象用作 async_read_some 的回调。我想将 yield 对象作为第二个参数传递给async_request_data,这样我就可以以同步的方式使用它。
如何做到这一点?我认为可以通过一些代理对象实现,可能使用基于 asio_handler_invoke 的方法。但我很难看到如何做到这一点。
【问题讨论】:
标签: c++ boost boost-asio coroutine