2009-07-11 9 views
12

Je veux qu'un std :: vector contienne certaines fonctions, et que d'autres fonctions puissent y être ajoutées en temps réel. Toutes les fonctions auront un prototype comme ceci:std :: vecteur de fonctions

void name (événement SDL_Event *);

Je sais comment faire un tableau de fonctions, mais comment créer un vecteur de fonctions std ::? J'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'eux n'a fonctionné. S'il vous plaît aider

Répondre

15

Essayez d'utiliser un typedef:

typedef void (*SDLEventFunction)(SDL_Event *); 
std::vector<SDLEventFunction> functions; 
+0

merci, cette a parfaitement fonctionné! –

8

Essayez ceci:

std::vector<void (*)(SDL_Event *)> functions; 
+0

Cela aurait probablement aussi fonctionné –

1

Si vous aimez augmenter alors 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; 
} 
Questions connexes