C'est impossible de le faire dans des conditions acceptable, c'est à dire sans recourrir à un classe de base sans fonction et qui necessite un dynamic_cast... En fait tout dépend de l'emplacement où tu veux passer les arguments à la fonction. En fait dans ta fonction time_ptr::analyze_time tu souhaiterai appeler un fonction sans argument. C'est à dire que ton vector est du type :
Le problème se pose au moment de l'ajout de la fonction. La solution est d'utilise un binder, par exemple std::bind (si je me souviens bien boost::bind est à peu près équivalent) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::vector< std::function<void()> > funcVector_;
Vu que bind ne se limite pas à ça je te conseille d'aller jeter un coup sur la doc de boost.bind et par la même occasion celle de boost.lambda. Et si tu as du temps à perdre, regarde la section 20.8 du draft du nouveau standard du C++. Enfin tu peux aller voir du coté de DevX C++, c'est un peu vieux mais il présente pas mal de nouveauté du C++11, par exemple les fonctions lambdas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template<class Func, class Arg1> void ajouter_fonction( Func func, Arg1 arg1) { funcVector_.push_back ( std::bind ( func, /// la fonction à binder arg1 /// les arguments déjà connus ) ); }
Partager