problème avec implémentation de fonctions callbacks
Bonjour à tous,
pour des raisons qui échappent à ma volonté (malheureusement), je me vois contraint d'implémenter des trucs tordus en ce moment.
Donc, pour expliquer mon souci:
j'ai un main qui ressemble à ceci:
Code:
1 2 3 4 5 6 7 8 9 10
| void macallback(char* message)
{
cout << message << endl;
}
int main(char* argv, char** argc)
{
Connector connector;
connector.sendText("toto", macallback);
} |
et voici la définition de Connector::sendText():
Code:
int Connector::sendText(std::string, void callback(char*));
Jusqu'ici, tout va bien.
Maintenant, il se trouve que dans Connector::sendText, je dois appeler une fonction (de libcurl) qui prend elle-même une callback. J'appelerais cette dernière curlCB. Et je voudrais que ma callback à moi, la mienne, soit appelée dans la callback curlCB.
J'ai tenté le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| struct MyParam
{
std::string str;
void CBack(char*);
}
void curlCB(void* userParam)
{
struct MyParam *param= (struct MyParam*) userParam;
param->CBack( param.str.c_str() );
}
int Connector::sendText(std::string, void callback(char*))
{
// je créé le param que je vais passer à la curlCB
MyParam param;
param.CBack = callback; // <---- pb ici
// je configure curl
curl_easy_setopt(m_pCurl, CURLOPT_READFUNCTION, curlCB); //je lui passe ma callback
curl_easy_setopt(m_pCurl, CURLOPT_READDATA, ¶m); //je passe le paramètre de la callback (curlCB)
} |
Le problème, et bien c'est que ça ne compile pas.
La ligne param.CBack = callback me renvoie l'erreur:
Citation:
error C2659: '=' : fonction comme opérande gauche
Mais justement, c'est ce que je veux: que ma fonction soit l'opérande gauche. Mais visiblement, je n'en ai pas le droit. Alors comment faire?