13

我想要一个 std::vector 包含一些功能,并且可以实时添加更多功能。所有的函数都会有一个这样的原型:

无效名称(SDL_Event *事件);

我知道如何制作函数数组,但是如何制作函数的 std::vector 呢?我试过这个:

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

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

std::vector<void> functions;

std::vector<void*> functions;

但他们都没有工作。请帮忙

4

3 回答 3

17

尝试使用 typedef:

typedef void (*SDLEventFunction)(SDL_Event *);
std::vector<SDLEventFunction> functions;
于 2009-07-11T00:36:52.777 回答
8

试试这个:

std::vector<void ( *)( SDL_Event *)> functions;
于 2009-07-11T00:39:29.703 回答
1

如果你喜欢 boost 那么你可以这样做:

#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;
}
于 2009-07-11T00:49:41.657 回答