2009-07-11 18 views
12

Ich möchte ein Std :: Vector einige Funktionen enthalten, und dass mehr Funktionen in Echtzeit hinzugefügt werden können. Alle Funktionen haben einen Prototyp wie folgt:Std :: Vektor der Funktionen

void name (SDL_Event * event);

Ich weiß, wie man ein Array von Funktionen macht, aber wie mache ich einen Std :: Vektor von Funktionen? Ich habe es versucht:

std::vector<(*)(SDL_Event *)> functions; 

std::vector<(*f)(SDL_Event *)> functions; 

std::vector<void> functions; 

std::vector<void*> functions; 

Aber keiner von ihnen hat funktioniert. Bitte helfen

Antwort

15

Versuchen Sie es mit einem typedef:

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

Danke, das hat perfekt funktioniert! –

8

Versuchen Sie folgendes:

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

Das hätte wahrscheinlich auch funktioniert –

1

Wenn Sie steigern möchten, dann könnten Sie es wie folgt tun:

#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; 
}