2016-04-28 9 views
0

libcurlでは、ファイル転送ごとに「ハンドル」を作成できます。これにより、ファイルのURLと、URLから取得されたファイルのビットとピースを受け取るコールバック関数を指定することができます。ハンドルごとに異なるコールバックが必要な場合はどうなりますか?あなたはこれについてどうやって行きますか?コールバックは非メンバ関数(または静的メンバ関数)でなければならないことに注意してください。あなたがハンドル動的を作成している場合を除きlibcurl、ハンドルごとに異なるコールバック関数を接続するにはどうすればいいですか?

size_t callback1(void* buffer, size_t size, size_t nmem, void* userp); 
size_t callback2(void* buffer, size_t size, size_t nmem, void* userp); 
size_t callback3(void* buffer, size_t size, size_t nmem, void* userp); 
// ...etc 

これは、作品:

一つの方法は、手動でのような、戻ってあなたのハンドルごとに異なるコールを入力することです。

void f(){ 
    CURLHandle handle = curl_easy_init(); 
    // set the url to some random url 
    // set a *unique* call back for this handle 
} 

どうすればよいですか?メンバー関数をコールバックとして使用することができれば簡単に解決できますが、できません。

+0

['std :: bind()'](http://en.cppreference.com/w/cpp/utility/functional/bind)が便利かもしれません。 –

答えて

3

カールはCなので、Cのやり方でこれを行う必要があります。コールバックは静的である必要があります。クラス変数にアクセスするには、パラメータをコールバックに渡す必要があります(CURLOPT_WRITEDATA参照)。これは、 "this"オブジェクト、または私が想定しているstd :: stringへのポインタでもあります。getinmemory.cの例を参照してください。

+0

ありがとうございます、私はオブジェクト(これ)で渡されたCURLOPT_WRITEDATAオプションを使用しました。 – MeLikeyCode

関連する問題