如何替换此示例代码片段中已弃用的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?
我发现了这个有趣的链接 提升::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_t
和boost::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();
}
相关文章:
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 控制到达非空函数clang(-Wreturn-type)的末尾
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- 将系数存储在头文件的数组中("does not name a type"错误)
- 尝试打开 ifstream 时出现"Incomplete type"错误
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在"结构提升::enable_if<提升::is_pod<T>,无效>"中没有名为"type"的类型
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- OpenCV CV_16F type
- C++ "错误:在'类 std::result_of< ... >"中没有名为'type'的类型"
- 将内存分配返回值强制转换为 TYPE 数组
- C++ 一个lambda浅拷贝const Type&如果它被赋予一个命名捕获,如[copy=val](){}?
- reference_wrapper导致"incomplete type is not allowed"
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- 由于"error C4430: missing type specifier - int assumed. Note: C++ does not support default-int",我现在无法编
- 如何解决"'mutex' in namespace 'std' does not name a type"?
- 结构中的错误"Incomplete type is not allowed"