asio::detail::resolver_service::async_resolve 函数的实现

小陆zi 2019-03-27 06:57:37
// Asynchronously resolve a query to a list of entries.
template <typename Handler>
void async_resolve(implementation_type& impl,
const query_type& query, Handler& handler)
{
// Allocate and construct an operation to wrap the handler.
typedef resolve_op<Protocol, Handler> op;
typename op::ptr p = { asio::detail::addressof(handler),
asio_handler_alloc_helpers::allocate(
sizeof(op), handler), 0 };
p.p = new (p.v) op(impl, query, io_service_impl_, handler);

ASIO_HANDLER_CREATION((p.p, "resolver", &impl, "async_resolve"));

start_resolve_op(p.p);
p.v = p.p = 0;
}
我的问题:
1,typename op::ptr p,这的ptr是什么?
2,typename 作用是什么?是模板参数吗?
3,后面的表达式{asio::detail::addressof(handler),asio_handler_alloc_helpers::allocate(sizeof(op), handler), 0}是拉姆达表达式吗?
...全文
192 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
srhouyu 2019-03-27
  • 打赏
  • 举报
回复
引用 楼主 小陆zi 的回复:
// Asynchronously resolve a query to a list of entries. template <typename Handler> void async_resolve(implementation_type& impl, const query_type& query, Handler& handler) { // Allocate and construct an operation to wrap the handler. typedef resolve_op<Protocol, Handler> op; typename op::ptr p = { asio::detail::addressof(handler), asio_handler_alloc_helpers::allocate( sizeof(op), handler), 0 }; p.p = new (p.v) op(impl, query, io_service_impl_, handler); ASIO_HANDLER_CREATION((p.p, "resolver", &impl, "async_resolve")); start_resolve_op(p.p); p.v = p.p = 0; } 我的问题: 1,typename op::ptr p,这的ptr是什么? 2,typename 作用是什么?是模板参数吗? 3,后面的表达式{asio::detail::addressof(handler),asio_handler_alloc_helpers::allocate(sizeof(op), handler), 0}是拉姆达表达式吗?
1. ptr是op中的一个结构体类型 2. typename op::ptr p 就相当于 op::ptr p,其中typename写在这里是为了强调op::ptr是op中的一个叫ptr的类型,不是op中一个叫ptr的静态变量。 因为op是模板类,在没有特化之前,谁也不能保证这个op::ptr究竟是一个类型,还是一个变量。C++默认按变量理解。 如果你的意思是op::ptr是类型,就要加typename。如果不加,C++会认为这一句话是两个变量op::ptr和p在并排写,语法错误。所以这是为了避免歧义的语法规定,属于typename的另一个用法。 3. 这是在对结构体p进行初始化而已,一个大括号中写三个逗号间隔的变量。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧