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

标签 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... );
}

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

最佳答案

使用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/

相关文章:

Android SQLite - 获取 ID

c++ - c++20 模板 lambda 的用例是什么?

python - c++ 中的 xgboost 负载模型(python -> c++ 预测分数不匹配)

c++ - 从字符串数组中获取值

ios - 如何在 Xcode 中将 my.sqlite3 导入我的 iPhone 项目

sql - 如何自动更新 SQL 数据库

android - 导出 Android SQLite 数据库

sqlite - 如何让 sqlalchemy 在 sqlite 中将日期时间存储为 julianday?

C++ 函数不可访问

c++ - 仅使用小于运算符查找两个变量是否相等