Bonsoir,
J'essaye d'explorer et de comprendre les variadic templates (avec g++-4.5 ou g++4.6).
Je connais std::function et std::bind, mais j'essaye d'avoir une classe pour encapsuler n'importe qu'elle fonction (pour l'instant libre, et non membre, c'est déjà suffisamment dur).
J'aimerais dans ma fonction execute :
1: Sortir chacun des paramètres de la chaine params en fonction de son type (ArgsType) avec des istringstream logiquement
2: Appeller la fonction (m_function) avec les paramètres obtenus précédement
3: Récupérer la sortie de la fonction, la convertir en ReturnType
4: Puis renvoyer le tout!
Et je crois que je vais finir par m'arracher les cheveux avec le code ci-dessous, sachant que c'est dans la fonction execute que je bloque seulement.
Je ne sais pas si ma façon d'exprimer le problème était suffisamment bonne. Si vous souhaitais plus d'explications dîtes moi le.
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
23
24
25
26
27
28
29
30
31 // Cette classe sert pour utiliser l'héritage, et donc avoir // une std::map< std::string, FunctionBase* > par exemple class FunctionBase { public : virtual ~FunctionBase() {} virtual std::string execute(const std::string ¶ms) = 0; }; template <typename ReturnType, typename... ArgsTypes> class Function : public FunctionBase { public: Function( ReturnType (*f)(ArgsTypes...) ) : m_function(f) {} virtual std::string execute(const std::string ¶ms) { // C'est ici que je suis bloqué std::cout << " "<< std::endl; return ""; } private: ReturnType (*m_function)(ArgsTypes...); };
Si quelqu'un peut me donner une voie à suivre ou m'aider je serais grandement reconnaissant, même si c'est pour dire que je me trompe complètement de voie.
Merci d'avance.
P.S. Ceux qui l'auront remarqué c'est le tuto de Laurent Gomilla http://loulou.developpez.com/tutorie...eur3d/partie7/ que j'essaye de faire moi-même.
Partager