Bonsoir,

Je suis à la recherche de quelques indications pour réaliser l'implémentation d'une collection de callbacks un peu particulière.

Je compte réaliser une classe utilisant une std::map dans laquelle je pourrais stocker des fonctions.
Le but est de les appeler lors du retour d'échanges asynchrones avec un serveur distant, typiquement en HTTP.
Ces fonctions seraient enregistrées sous divers identifiants tels que "success", "error", "timeout"... pour être appelées dans ces différents cas sous cette forme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
int retour = clbk.call("success", arg1, arg2, ..., argN);
Néanmoins, je rencontre 3 problèmes majeurs, sans également savoir si la formalisation de mon besoin est compatible avec des langages comme le c++.
La 1ere chose est de savoir quel type C++ utiliser pour représenter une fonction de rappel. Il semble y avoir boost::function mais aussi d'autre types en c++ natif. Lequel choisir?

Le second problème, il ne sera pas des moindres, est la manière dont je compte appeler mes fonctions : avec un nombre et un type d'argument variable (cf le code ci-dessus). Est-ce possible en C++?
Il n'est pas exclus que tous mes callbacks "success" puissent avoir la même signature, mais deux callbacks "success" et "error" auront forcément des différences. Utiliser ma méthode call() pour tous les appeler n'est peut-être pas implémentable.

Le 3ième reste le type de retour. Si call() renvoie lui-même le retour de la fonction appelée et qu'il est sans cesse différent je risque d'être un peu coincé.

Existe-t-il une solution à ce type de problème?
Je connais l'exemple de printf, qui peut admettre un nombre variables d'arguments de différents type sans savoir comment déclarer une telle méthode de classe.

Merci par avance pour vos éclairages éventuels.