我希望std :: vector包含一些函数,并且可以实时添加更多函数。所有的功能都有这样的原型:
void name(SDL_Event * event);
我知道如何创建一个函数数组,但是如何创建一个std :: vector函数?我试过这个:
std::vector<( *)( SDL_Event *)> functions;
std::vector<( *f)( SDL_Event *)> functions;
std::vector<void> functions;
std::vector<void*> functions;
但他们都没有奏效。请帮忙
答案 0 :(得分:16)
尝试使用typedef:
typedef void (*SDLEventFunction)(SDL_Event *);
std::vector<SDLEventFunction> functions;
答案 1 :(得分:8)
试试这个:
std::vector<void ( *)( SDL_Event *)> functions;
答案 2 :(得分:1)
如果你喜欢加强,那么你可以这样做:
#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;
}