13

I want a std::vector to contain some functions, and that more functions can be added to it in realtime. All the functions will have a prototype like this:

void name(SDL_Event *event);

I know how to make an array of functions, but how do I make a std::vector of functions? I've tried this:

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

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

std::vector<void> functions;

std::vector<void*> functions;

But none of them worked. Please help

3 Answers3

17

Try using a typedef:

typedef void (*SDLEventFunction)(SDL_Event *);
std::vector<SDLEventFunction> functions;
Greg Hewgill
  • 951,095
  • 183
  • 1,149
  • 1,285
8

Try this:

std::vector<void ( *)( SDL_Event *)> functions;
Igor Krivokon
  • 10,145
  • 1
  • 37
  • 41
1

If you like boost then then you could do it like this:

#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;
}
StackedCrooked
  • 34,653
  • 44
  • 154
  • 278