Использование SQLite в C ++: объектная функция в качестве обратного вызова

Итак, я работаю над сайд-проектом, чтобы сохранить свои навыки в области c ++ (прошло много лет с тех пор, как я работал в c ++). Я работаю над тем, где я буду использовать SQLite. У меня есть обертка вокруг кода SQLite. Одна из вещей, на которые я обращаю внимание, - это то, что SQLite использует функции обратного вызова в стиле c в своей функции sqlite3_exec (...).

Я хотел бы, чтобы функция обратного вызова была объектным методом, так как я хотел бы, чтобы он мог изменять переменные объекта, но не уверен, как именно это сделать. Я проверял другие подобные вопросы на 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();
};

Вот как я пытаюсь использовать обратный вызов (callbackSel) из getNumUserRecords:

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’

Моя проблема в том, что если я сделаю это статической функцией, я не смогу получить доступ к своему вектору, записям, верно? Есть ли способ обойти это?

Ответы на вопрос(1)

Ваш ответ на вопрос