1

http 接続にカサブランカ C++ Rest SDKを使用しています。以下は、http リクエストを行う基本的なコードです。

カサブランカのドキュメントからコピー:

// Creates an HTTP request and prints the length of the response stream.
pplx::task<void> HTTPStreamingAsync()
{
    http_client client(L"http://www.google.com");

    // Make the request and asynchronously process the response. 
    return client.request(methods::GET).then([](http_response response)
    {
        // Response received, do whatever here.
    });
}

これは非同期リクエストを行い、完了するとコールバックを行います。これらのコードを使用する独自のクラスを作成する必要があり、それを独自のコールバックにラップしたいと考えています。

簡単にするために、google.com の html コードを出力するメソッドを持つクラスを作成したいとします。

だから私は次のようなものを期待していました:

MyClass myObject;
myObject.getGoogleHTML([](std::string htmlString)
{
    std::cout << htmlString;
});

次のような関連記事を検索して読みました。

  1. C++ クラス メンバー コールバックの簡単な例
  2. C++11 スタイルのコールバック?
  3. Friday Q&A 2011-06-03: Objective-C ブロック vs. C++0x ラムダ: 戦え!

しかし、私はcompletion blockinに慣れているので、まだ少し混乱していObjective-Cます。コールバックをラップするようなクラスを構築するにはどうすればよいですか?

4

1 に答える 1

1

ラムダを一般的な型として取ります。おまけとして、他の呼び出し可能なオブジェクトで動作します。

template<typename F>
pplx::task<void> MyClass::getGoogleHTML(F f) {
    http_client client(L"http://www.google.com");
    return client.request(methods::GET).then(f);
}

必要に応じて、 andfを介して完全に転送することもできます。渡されたラムダに与える何かを実際に抽出しようとしている場合は、ラムダをそのキャプチャに渡し、その抽出されたデータでそれを呼び出します。F &&f.then(std::forward<F>(f))thenf

于 2014-06-26T15:20:24.297 に答える