我目前正在制作一个基于本教程的简单sqlite3包装器(http://www.tutorialspoint.com/sqlite/sqlite_c_cpp.htm)
我的问题是关于查询中的回调函数。
static int callback(void *data, int argc, char **argv, char **azColName){
int i;
fprintf(stderr, "%s: ", (const char*)data);
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
回调函数不是类
的成员函数class Wrapper() {
public:
Wrapper();
~Wrapper();
private:
vector<map<string, string> > result;
};
static int callback(){
result.insert( ...data... );
}
我将如何解决这个问题。非常感谢帮助。 感谢...
答案 0 :(得分:2)
使用data
参数将指针传递给类对象。
static int callback(void *data, int argc, char **argv, char **azColName){
Wrapper * wrapper = static_cast<Wrapper*>(data);
wrapper->result.insert( ...data... );
}
将合适的指针传递给使用回调的sqlite函数
Wrapper my_wrapper;
rc = sqlite3_exec(db, sql, callback, &my_wrapper, &err_msg);
请注意,回调必须是朋友或静态成员才能直接访问result
,例如。如果它仅使用公共接口,则它可以是非成员。