Хитрость заключается в том, чтобы создать статический «вспомогательный» метод и использовать аргумент void-pointer, предоставленный в callback-подписи, чтобы передать указатель на ваш объект в этот метод.Затем статический вспомогательный метод может использовать этот указатель для вызова нестатического метода:
class ScoreManagement {
public:
static int callback(void *objPtr, int argc, char **argv, char **azColName) {
return ((ScoreManagement *)objPtr)->callbackAux(argc, argv, azColName);
}
private:
int callbackAux(int argc, char ** argv, char ** azColName) {
playerRecords[player_number].name = argv[1] ? argv[1] : "NULL";
player_number++;
return 0;
}
};
[...]
// Note that you must pass in a pointer to your `ScoreManagement` object
// as an argument here, so that it will be passed in to `callback()`
sqlite3_exec(DB, query.c_str(), ScoreManagement::callback, &myScoreManagementObject, NULL);