首页 C++系列18:三方库回调函数
文章
取消

C++系列18:三方库回调函数

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();

欢迎评论交流

本文由作者按照 CC BY 4.0 进行授权