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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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, &param); //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:
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?