从asio处理程序生成新的异步请求

时间:2012-09-04 22:05:56

标签: c++ boost boost-asio shared-ptr

我正试图用ASIO弄湿自己,并认为一个好的第一个项目将是一个简单的网络爬虫:下载一个HTML页面,找到其中的链接,下载所有链接。

我尝试修改ASIO http客户端示例以使用enable_shared_from_this而不是原始指针,这样我就可以从上一个任务的处理程序中生成新的异步任务,而不必担心资源在我的中间被删除工作

当我尝试将客户端子类化为以不同方式处理不同页面时,问题就开始了。编译器抱怨shared_ptr的类型与this的类型不匹配。

有人知道这是如何解决的吗?我自己无法弄明白。

1 个答案:

答案 0 :(得分:2)

这与Asio无关。

如果您从enable_shared_from_this继承了基类,但在派生的基类中需要它,请使用boost::static_pointer_cast

struct base : enable_shared_from_this<base>
{
};

struct derived : base
{
  shared_ptr<derived> shared_from_derived()
  {
    return static_pointer_cast<derived>(shared_from_this());
  }
};