std :: vecteur de fonctions
Question
Je veux un std :: vecteur pour contenir certaines fonctions, et que d'autres fonctions peuvent y être ajoutées en temps réel. Toutes les fonctions auront un prototype comme ceci:
nom vide (événement SDL_Event de *);
Je sais comment faire un éventail de fonctions, mais comment puis-je faire un std :: vecteur de fonctions? Je l'ai essayé ceci:
std::vector<( *)( SDL_Event *)> functions;
std::vector<( *f)( SDL_Event *)> functions;
std::vector<void> functions;
std::vector<void*> functions;
Mais aucun d'entre eux travaillaient. S'il vous plaît aider
La solution
Essayez d'utiliser un typedef:
typedef void (*SDLEventFunction)(SDL_Event *);
std::vector<SDLEventFunction> functions;
Autres conseils
Essayez ceci:
std::vector<void ( *)( SDL_Event *)> functions;
Si vous aimez augmenter alors vous pouvez le faire comme ceci:
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <vector>
void f1(SDL_Event *event)
{
// ...
}
void f2(SDL_Event *event)
{
// ...
}
int main()
{
std::vector<boost::function<void(SDL_Event*)> > functions;
functions.push_back(boost::bind(&f1, _1));
functions.push_back(boost::bind(&f2, _1));
// invoke like this:
SDL_Event * event1 = 0; // you should probably use
// something better than 0 though..
functions[0](event1);
return 0;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow