2016-11-24 23 views
0

私は、クライアントサーバー通信用のトークンメカニズムに基づいてミドルウェアサービスを構築しています。今私たちはDBusからCommon APIに移植しています。そして、我々はトークンメカニズムに基づいて構築されたフレームワークを保持したい。しかし、共通APIでは、すべての非同期呼び出しに対して、コールバックでトークンを返すことはありません。一般的なAPIコールバック関数でcallinfoを取得する方法

私は

CommonAPI::CallStatus getAudio(int arg1, int arg 2, Callback,const CommonAPI::CallInfo) 

コールバックのタイプがあるように関数を呼び出すしたい -

void Callback(const CommonAPI::CallStatus& status, int & id, int error& errorVal); 

私の質問: コールバックでgetAudio関数を呼び出している間、私が送った何CallInfoのparamはありません。コールバックからcallInfoを取得する方法を教えてもらえますか?

答えて

0

あなたのトークンをCallInfo構造体に渡すことができるとは確信していません。とにかく、コールバックに渡すオブジェクトが何であれ、たとえばstd :: functionをこの目的のために使用できます。私はラムダ式も仕事をすることができると信じています。

次の例では、CallInfoオブジェクトを渡す可能性のある方法について説明しますが、そのコードはCommonAPIコールバックに対してどのクラスにも適用できます。

#include <functional> 
using namespace std::placeholders; 

class CallbackHelper { 
public: 
    explicit CallbackHelper(CallInfo& callinfo_) : 
    _callinfo(callinfo_) { 
    } 
    void callback(const CommonAPI::CallStatus& status, int & id, int, error& errorVal) { 
    // Do whatever with _callinfo 
    } 
private: 
    CallbackHelper() = default; 
}; 

CallInfo callInfo; 
CallbackHelper myCallback(callInfo); 

std::function<void(const CommonAPI::CallStatus& status, int & id, int, error& errorVal)> callback = std::bind(&CallbackHelper::callback, &myCallback, _1, _2, _3, _4); 

getAudio(1, 2, callback, callInfo); 

だけ...

コールバックがeffectivellyトリガされたときmyCallbackオブジェクトがまだ生きていることを確認してください
関連する問題