Korzystanie z SQLite w C ++: funkcja obiektu jako wywołanie zwrotne

Więc pracuję nad projektem pobocznym, aby utrzymać moje umiejętności w c ++ na bieżąco (minęło wiele lat, odkąd wykonałem pracę w c ++). Pracuję nad czymś, w czym będę używać SQLite. Mam opakowanie wokół kodu SQLite. Jedną z rzeczy, które zauważam, jest to, że SQLite używa funkcji zwrotnych w stylu cw swojej funkcji sqlite3_exec (...).

Chciałbym, aby funkcja zwrotna była metodą obiektową, ponieważ chciałbym, aby mogła ona modyfikować zmienne obiektowe, ale nie jestem pewna, jak to zrobić dokładnie. Sprawdziłem inne podobne pytania na temat przepełnienia stosu, ale nic mi nie pomogło.

Oto jak deklaruję klasę opakowania:

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();
};

Oto jak próbuję użyć wywołania zwrotnego (callbackSel) z poziomu 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;
}

Otrzymuję komunikat o błędzie:

 error: ‘int (* DBAdapter::callbackSel)(void*, int, char**, char**)’ is not a static member of ‘class DBAdapter’

Mój problem polega na tym, że jeśli uczynię tę funkcję statyczną, nie będę mieć dostępu do mojego wektora, rekordów, prawda? Czy jest jakiś sposób na obejście tego?

questionAnswers(1)

yourAnswerToTheQuestion