1

我正在尝试使用 ASIO,并认为一个好的第一个项目将是一个简单的网络爬虫:下载一个 html 页面,找到其中的链接,下载所有链接。

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

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

有人知道这是如何解决的吗?我一直无法自己弄清楚。

4

1 回答 1

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());
  }
};
于 2012-09-05T08:42:35.217 回答