如何获取通用API回调函数中的callinfo
问题描述:
我有用于客户端服务器通信的基于令牌机制的中间件服务。现在我们正在从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吗?
答
我不确定你可以在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触发...