2009-07-11 67 views
12

Tôi muốn một std :: vector chứa một số chức năng và có thể thêm nhiều chức năng hơn vào nó trong thời gian thực. Tất cả các chức năng sẽ có một mẫu thử nghiệm như sau:std :: vectơ chức năng

tên trống (sự kiện SDL_Event *);

Tôi biết cách tạo một mảng các hàm, nhưng làm cách nào để tạo một std :: vectơ hàm? Tôi đã thử điều này:

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

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

std::vector<void> functions; 

std::vector<void*> functions; 

Nhưng không ai trong số họ làm việc. Xin vui lòng giúp

Trả lời

15

Thử sử dụng typedef:

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

cảm ơn, này làm việc hoàn hảo! –

8

Hãy thử điều này:

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

Điều này có thể cũng đã hoạt động –

1

Nếu bạn muốn tăng cường sau đó thì bạn có thể làm điều đó như thế này:

#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; 
} 
Các vấn đề liên quan