我正试图用ASIO弄湿自己,并认为一个好的第一个项目将是一个简单的网络爬虫:下载一个HTML页面,找到其中的链接,下载所有链接。
我尝试修改ASIO http客户端示例以使用enable_shared_from_this而不是原始指针,这样我就可以从上一个任务的处理程序中生成新的异步任务,而不必担心资源在我的中间被删除工作
当我尝试将客户端子类化为以不同方式处理不同页面时,问题就开始了。编译器抱怨shared_ptr的类型与this
的类型不匹配。
有人知道这是如何解决的吗?我自己无法弄明白。
答案 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());
}
};