Ich möchte sqlite Abfrage mit angegebenen Callback ausführen. Die einzige Lösung, die ich mir vorstellen kann, ist, sqliteCallback als statische Funktion zu definieren, aber ich brauche sie nicht statisch, weil ich dort auf nicht-statische Member meiner Klasse zugreifen möchte. Wie man es richtig macht?Wie zu beheben "in diesem Fall" Verweis auf nicht-statische Member-Funktion aufgerufen werden muss?
class SqlDB {
private:
int someIntVar;
int sqliteCallback(void *NotUsed, int argc, char **argv, char **azColName) {
// Here I should have an access to non-static member: someIntVar
return 0;
}
void query(std::string queryStr) {
// Reference to non-static member function must be called:
int res = sqlite3_exec(_sqlHandle, queryStr.c_str(), SqlDB::sqliteCallback, 0, &_sqlliteErrMsg);
}
};
Warum sind sie in erster Linie dann statisch? In jedem Fall können Sie einen Verweis auf eine Instanz immer an eine statische Funktion übergeben. –
Verwenden Sie nicht sqlite3_exec. Verwenden Sie vorbereiten, Schritt und finalisieren. –
In einer 'statischen' Version könnte Ihre' void * NotUsed' 'void * instance' sein, die Sie in eine' SqlDB' zurückwerfen und verwenden, um eine Memberfunktion aufzurufen, die die eigentliche Arbeit leistet. – user4581301