如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?

How can I replace deprecated handler_type_t or boost::asio::handler_type in this example code snippet?

本文关键字:handler type asio boost 替换 何替换 片段 代码      更新时间:2023-10-16

我发现了这个有趣的链接 提升::ASIO::生成产量作为回调

由于这可能是我需要的,我想尝试以下部分:

template <class CompletionToken>
auto async_foo(uint64_t item_id, CompletionToken&& token)
{
typename boost::asio::handler_type< CompletionToken, void(error_code, size_t) >::type handler(std::forward<CompletionToken>(token));
//handler_type_t<CompletionToken, void(error_code, size_t)>                        handler(std::forward<CompletionToken>(token));
async_result<decltype(handler)> result(handler);
//async_request_data(item_id, handler);
return result.get();
}  

但显然,handler_type_tboost::asio::handler_type在较新的提升版本中都不再存在。

如何改编示例?

编辑:

这是他的方式吗?而不是

boost::asio::handler_type< CompletionToken, void(error_code, size_t) >::type

我用了

typename boost::asio::async_result< CompletionToken, void(error_code, size_t) >::completion_handler_type

它几乎是对的。 来自boost.asio的文档

发起函数通过执行typename async_result<decay_t<CompletionToken>, Signature>::completion_handler_type来确定其完成处理程序函数对象的 CompletionHandler 类型

启动函数生成其返回类型,如下所示:

— 构造类型async_result<decay_t<CompletionToken>, Signature>的对象结果,初始化为result(completion_handler);

— 使用result.get()作为返回语句的操作数。

所以正确的适应示例方法是

template <class CompletionToken>
auto async_foo(uint64_t item_id, CompletionToken&& token)
{
typename boost::asio::async_result<std::decay_t<CompletionToken>, void(std::error_code, std::size_t)>::completion_handler_type
handler(std::forward<CompletionToken>(token));
boost::asio::async_result<std::decay_t<CompletionToken>, void(std::error_code, std::size_t)> result(handler);
async_request_data(item_id, handler);
return result.get();
}