質問

私はのstd ::ベクトルは、いくつかの機能が含まれており、より多くの機能は、リアルタイムでそれに加えることができることをしたいと思います。すべての機能は、このようなプロトタイプを持つことになります。

のボイド名(のSDL_Event *イベント);

私は、関数の配列を作成する方法を知っているが、どのように私は機能のSTD ::ベクトルを作るのですか?私はこれを試してみた:

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

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

std::vector<void> functions;

std::vector<void*> functions;

しかし、それらのどれも働きました。助けてください。

役に立ちましたか?

解決

のtypedefを使用してみてください。

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

他のヒント

これを試してください:

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

あなたがして、その後後押し好きなら、あなたはこのようにそれを行うことができます:

#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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top