我应该如何在我自己的函数中传递 boost::asio::yield_context
How should I pass a boost::asio::yield_context in my own functions?
我正在编写一个C++11网络库,它在引擎盖下使用Boost.Asio。我想公开一个允许用户使用堆叠协程的 API。我应该如何在 API 函数中接受 boost::asio::yield_context
参数?按价值?通过参考?通过常量引用?我不知道复制这些yield_context
对象的成本有多高。
例如:
Result remoteProcedureCall(Args args, boost::asio::yieldcontext yield)
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ How to pass?
我知道我可以采用通用参考并进行完美的转发:
template <typename TYield>
Result remoteProcedureCall(Args args, TYield&& yield)
{
//...
boost::asio::async_write(socket_, buffer, std::forward<TYield>(yield));
//...
}
但我更希望我的 API 函数是非模板化的,这样我就可以实现 Pimpl 习语。
上下文的生存期与协程本身的生存期相对应,这是很有意义的。
这意味着,我预计它包含一个指向实际(隐藏)实现状态的指针(或reference_wrapper)。
也就是说,只需像 Boost 库本身那样做,即按值获取yield_context
对象。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 执行时使用 boost::asio::d eadline_timer 时出错
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- boost::asio data owning `ConstBufferSequence`
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何将boost::asio::d eadline_timer 与Qt一起使用?
- 将更高的优先级设置为 boost::asio 线程处理进程
- Async_read_until限制读取的字节大小(Boost::asio)
- 程序崩溃使用boost::asio
- boost::asio 无法捕获 SIGINT
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- 如何使用C++和Boost Asio从HTTP发布请求中获取键值
- std::boost::asio::p ost / dispatch 使用哪个io_context?