1

私はASIOに足を踏み入れようとしていて、最初の良いプロジェクトは単純なWebクローラーだと思いました。htmlページをダウンロードし、その中のリンクを見つけて、すべてのリンクをダウンロードします。

ASIO httpクライアントの例を変更して、rawポインターの代わりに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 に答える