我目前正在根据本教程制作一个简单的 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... );
}
我该如何解决这个问题。非常感谢您的帮助。 谢谢...
最佳答案
使用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);
请注意,回调必须是友元或静态成员才能直接访问结果
,如示例所示。如果仅使用公共(public)接口(interface),则可以是非成员。
关于C++ 从非成员调用类函数/数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28557843/