【问题标题】:Spawning new async request from an asio handler从 asio 处理程序产生新的异步请求
【发布时间】:2012-09-04 22:05:56
【问题描述】:

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

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

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

有人知道这是怎么解决的吗?我自己也想不通。

【问题讨论】:

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


    【解决方案1】:

    这与 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());
      }
    };
    

    【讨论】:

    • 谢谢,我是 boost 新手,不知道 static_point_cast
    猜你喜欢
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多