1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
有个sdk提供了头文件sdk.h,然后我们在代码里面用
namespace Test
{
#inclhude "sdk.h"
}
引入了。
sdk.h里面有个函数
Trigger(Survey_StrCb cb, void* contex);
其中cb是
typedef void (*Survey_StrCb)(const char* jsonStr, void* contex);
我现在在一个类中调用上面的Trigger
using SurveyCallback = std::function<void(const char*)>;
Survey::triggerSurvey(SurveyCallback& cb)
{
auto ret = Test::Trigger(
[](const char* jsonStr, void* contex)
{
(*static_cast<SurveyCallback*>(contex))(jsonStr);//取出回调函数
},
&cb); //将回调函数作为上下文
}
外面怎么调这个类方法:
Survey::SurveyCallback aCb =
[&oEventLoop, &timer, &oUrl](const char* jsonStr)
{
oUrl = "https://www.baidu.com/";//解析jsonStr
timer.stop();
oEventLoop.quit();
};
pSurvey->triggerSurvey(aCb);//注意aCb不能用auto接收,因为隐式转换不了。
timer.start(5 * 1000);
oEventLoop.exec();
Dialog dlg(oUrl, pParentWidget);
dlg.exec();
欢迎评论交流