[英]Using SQLite in C++: object function as a callback
因此,我正在开展一个侧面项目,以保持我的c ++技能新鲜(自从我用c ++完成工作已经很多年了)。 我正在开发一些我将使用SQLite的东西。 我有一个SQLite代码的包装器。 我注意到的一件事是SQLite在其sqlite3_exec(...)函数中使用了c风格的回调函数。
我想让回调函数成为一个对象方法,因为我希望它能够修改对象变量,但我不确定如何准确地执行此操作。 我已经检查了stackoverflow上的其他类似问题,但没有任何帮助。
这是我如何声明我的包装类:
class DBAdapter
{
private:
sqlite3* db;
int getUserRecords(std::string);
std::vector<USER_RECORD> records;
int callbackSel(void*, int , char**, char**);
public:
DBAdapter();
~DBAdapter();
int open(std::string);
void close();
int insertRecord();
int deleteRecord();
int getNumUserRecords();
};
以下是我在getNumUserRecords中尝试使用回调(callbackSel)的方法:
int DBAdapter::getUserRecords(std::string name)
{
std::string sql = "SELECT" + name + " from USERS";
char* ErrMsg;
char* data;
int retval = sqlite3_exec(db,sql.c_str(),this->callbackSel,data,&ErrMsg);
return retval;
}
我得到的错误消息是:
error: ‘int (* DBAdapter::callbackSel)(void*, int, char**, char**)’ is not a static member of ‘class DBAdapter’
我的问题是,如果我将其设为静态函数,我将无法访问我的向量,记录,对吧? 有没有办法解决?
有没有办法解决?
我不知道sqlite API具体,但通常c风格的回调支持从void*
指针传递用户数据(我猜你提到的那个签名的第一个参数)。 通常做的是:
我希望这指出了正确的方向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.