在sqlite3的C API中,函数sqlite3_exec需要回调函数作为参数,由
static int callback(void* data, int argc, char** argv, char** azColName)
字符串
我想让它在主回调之前使用一个 Package 器函数来执行。即,将我的 Package 器函数传递给sqlite3_exec(),它调用实际的回调。
一个实际的用例来说明我试图实现的是记录响应。由于记录响应的代码(在我的用例中)不会在不同的查询中改变,因为它可以循环发送的列数,我希望记录定义 * 一次 *(即在 Package 器中),而不是为所有任意数量的未来回调函数重新定义它。
这似乎是要走的路,但我不知道如何实现这一点。
我试过创建一个接受另一个参数的 Package 器-实际的回调,但是传递这个参数当然不起作用,因为函数定义不同。
**更新:**无法编译的示例代码
#include <sqlite3.h>
#include <iostream>
#include <vector>
class Callback
{
public:
Callback( int(*callback)(void* data, int argc, char** argv, char** azColName), void* data )
: m_callback(callback), m_data(data) {}
~Callback(){}
public:
int CallbackWrapper(void* data, int argc, char** argv, char** azColName)
{
//Do something
return m_callback(m_data, argc, argv, azColName);
}
private:
int (*m_callback)(void* data, int argc, char** argv, char** azColName);
void* m_data;
};
class Product_Queries
{
public:
Product_Queries() {}
~Product_Queries() {}
public:
int GetProductIds_Callback(void* data, int argc, char** argv, char** azColName){
std::vector<int>* ids = (std::vector<int>*)data;
ids->push_back(std::stoi(argv[0]));
return 0;
}
};
int main(int argc, char* argv[])
{
sqlite3* db;
sqlite3_open("database.db", &db);
Product_Queries product_queries;
std::vector<int> productIds;
Callback callback(product_queries.GetProductIds_Callback, (void*)&productIds); //Error here
sqlite3_exec(db, "SELECT id FROM Products", callback.CallbackWrapper, nullptr, nullptr); //Error here
sqlite3_close(db);
return 0;
}
型
两个错误都是invalid use of non-static member function
1条答案
按热度按时间gj3fmq9x1#
也许沿着这样的:
字符串