c++11 - Convert function type for sqlite callback -


i'm writing program using sqlite. i've got class datasend_task, periodicaly select data bd , send server.

in datasend_task i've got method callback, want sent argument sqlite3_exec.

i've got error:

error: cannot convert ‘std::function<int(void*, int, char**, char**)>’ ‘int (*)(void*, int, char**, char**)’ argument ‘3’ ‘int sqlite3_exec(sqlite3*, const char*, int (*)(void*, int, char**, char**), void*, char**)’          if (sqlite3_exec(this->db, this->sql_select_readings_query, callback, 0, &err)) { 

source code part:

int datasend_task::callback(void *notused, int argc, char **argv, char **columnname){...}  void datasend_task::senddata() {     using namespace std::placeholders;     std::function<int(void *, int, char **, char **)> callback =           std::bind(&datasend_task::callback, this, _1, _2, _3, _4);      if (sqlite3_exec(this->db, this->sql_select_readings_query,                        callback, 0, &err))      { ... } } 

as understand problem in converting callback type sqlite_exec accepts. don't know how fix it.

you cannot convert std::function function pointer. however, can still accomplish want lambda. some sorcery, lambda no capture can converted function pointer (exactly need). notice sqlite3_exec() accepts void* 1st argument - can use in no-capture lambda call member function:

if (sqlite3_exec(this->db, this->sql_select_readings_query,      +[](void* instance, int x, char** y, char** z) {         return static_cast<datasend_task*>(instance)->callback(x, y, z);     },     this,     &err)) {     /* whatever */ } 

Comments