c ++从非成员调用类函数/数据

时间:2015-02-17 08:43:41

标签: c++ sqlite

我目前正在制作一个基于本教程的简单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... );
}

我将如何解决这个问题。非常感谢帮助。 感谢...

1 个答案:

答案 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,例如。如果它仅使用公共接口,则它可以是非成员。