http://hi.baidu.com/52study/item/82ed1838b96725b7b80c033f?connect=qzone
1、C++代码中的回调函数
在C++的头文件中声明回调函数,如typedef void (*OnCompleteCallback)(const char *code, bool flag);
2、C++代码中的结构体
在C++的头文件中声明一个结构体,该结构体中包含回调函数的一个函数声明变量属性。如:
|
1
2
3
4
5
6
|
typedef struct tagStreamInfo {
CFDictionaryRef proxy; // 可以使用Objective-C的数据类型
SInt64 fileSize;
OnCompleteCallback Complete; // 回调函数声明
} StreamInfo; |
3、C++代码中声明静态函数
可以使用C++代码中的静态函数来调用回调函数,先声明一个结构体参数或指针类型参数的函数。如:
|
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
|
// util.h文件中声明 class CUtil
{ public:
CUtil();
virtual ~CUtil();
public:
Boolean Upload(OnCompleteCallback callback);
public: // 注意必须声明为public
static void UploadCallBack(void *clientCallbackInfo);
}; // util.cpp文件中实现 void CUtil::UploadCallBack(void *clientCallbackInfo)
{ StreamInfo *info = (StreamInfo *)clientCallbackInfo;
// 其他代码
......
// 回调
if (info->CompleteUpload != NULL) {
(*info->CompleteUpload)("to complete uploading", true);
}
} Boolean CUtil::Upload(OnCompleteCallback callback) { StreamInfo *info = new StreamInfo();
info->CompleteUpload = callback;
} |
4、Objective-C代码中实现C++代码中的回调函数
|
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
|
// manager.h文件 void OnCompleteUpload(const char *code, bool flag);
@interface manager : NSObject +(manager *)sharedInstance; -(void)upload;
-(void)completeUpload:(NSString *)code success:(BOOL)flag;
@end // manager.mm文件 // 实现回调函数 void OnCompleteUpload(const char *code, bool flag)
{ NSString *str = [NSString alloc] initWithUTF8String:code] autorelease];
[manager sharedInstance] completeUpload:str success:flag];
} @implementation manager +(manager *)sharedInstance { static dispatch_once_t onceToken;
static *manager instance;
dispatch_once(&onceToken,^{ instance=[[manager alloc] init];
return instance;
} -(void)completeUpload:(NSString *)code success:(BOOL)flag {
NSLog(@"%@", code);
} -(void)upload {
CUtil *utl = new CUtil();
utl->Upload(OnCompleteUpload); // 此处调用回调函数
} @end |