2016-11-24 167 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 。有人可以帮助我如何从callback获取callInfo吗?

回答

0

我不确定你可以在CallInfo结构中传递你的令牌。无论如何,无论您想要传递给回调的对象是什么,例如,您都可以使用std :: function来实现此目的。我相信lambda表达式也可以完成这项工作。

在下面的示例中,我将介绍一种将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); 

只要确保myCallBack函数对象仍然活着的时候回调effectivelly触发...

相关问题