bonjour,
j'utilise sqlite3 et j'ai un problème : cette librairie exige l'utilisation d'une méthode static (comme callback) hors je voudrait que cette méthode modifie une variable propre à une instance de monobjet.
comment faire ?
Version imprimable
bonjour,
j'utilise sqlite3 et j'ai un problème : cette librairie exige l'utilisation d'une méthode static (comme callback) hors je voudrait que cette méthode modifie une variable propre à une instance de monobjet.
comment faire ?
je voudrait que nbCount soit propre à une instance :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #ifndef SQLITE3_HH #define SQLITE3_HH #include <iostream> #include <string> #include <sqlite3.h> using namespace std; class SQLITE3 { private: sqlite3 *db; static int nbCount; public: SQLITE3(const string& tablename); ~SQLITE3(); int exe(const string& s_exe); static int callback(void *NotUsed, int argc, char **argv, char **azColName); int count(const string& s_exe); static int callbackCount(void *NotUsed, int argc, char **argv, char **azColName); static void setNb(int n); static int getNb(void); }; #endif
pour faire quelque chose comme ça :
Code:
1
2
3
4
5
6
7
8 ... SQLITE3 sql, sql2; sql.count("SELECT...."); sql2.count("SELECT...."); int n=sql.getNb(); int n2=sql2.getNb(); ...
Lorsque tu enregistres ta callback au niveau de sqlite, est ce que tu peux passer un paramètre ?
Si c'est non, ce que tu veux faire n'est pas possible à moins de passer par une variable globale. Dans le cas contraire, tu passes un pointeur this sur ta classe.
C'est du pseudo code car je ne connais pas sqlite (désolé :?)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 // la déclaration de la classe class CMaClasse { ... static void static_class_function(void *ExtraParam); void class_function(void); ... } // la definition de la fonction statique de callback void CMaClasse::static_class_function(void *ExtraParam) { CMaClasse *This = (CMaClasse *)ExtraParam; This->class_function(); } // la definition de la fonction de callback void CMaClasse::class_function(void) { ... } // l'enregistrement de la fonction callback ... RegisterCallback(CMaClasse::static_class_function, this); ...
non, je ne peux pas faire cela (enfin pas à ma connaissance) par contre je peux décaler le callback dans une classe utlisant SQLITE3. ça me suffit pour l'instant.
merci
edit : en fait je peux passer un argument au callback.