2014-10-05 81 views
-1

是的,這是如何完成的?以一個函數作爲參數類似於std :: thread

我擡頭的東西有相當具體的定義函數。首先,我不知道如何用va_arg列表調用函數。對於兩個人,我不知道它應該是什麼樣子。

我希望能夠爲任何功能做

event.register(func, arg1, arg2, arg3, ...); 

,而不使用模板,就像std::thread做的。

我該怎麼做?

+3

'的std :: thread'做它與可變參數模板ARGS – quantdev 2014-10-05 02:10:07

+1

乘坐['的std :: function'](HTTP:// EN。 cppreference.com/w/cpp/utility/functional/function)參數。 – 2014-10-05 02:11:11

+0

_「不使用模板,就像std :: thread一樣。」_正如前面提到的,當然,std :: thread' ***實際上使用了模板***。也看看[完美轉發](http://stackoverflow.com/questions/7038357/make-unique-and-perfect-forwarding)。 – 2014-10-05 02:16:25

回答

0

解決

class Event 
{ 
    list<function<void()>> functions; 
public: 
    Event() 
    { 
    } //Event 

    template<typename T, typename... Args> 
    void reg(T& func, Args... args) 
    { 
     functions.push_back(bind(func, args...)); 
    } //reg 

    void execute() 
    { 
     for (auto& func : functions) 
     { 
      func(); 
     } //for 
    } //execute 
}; 

=)

Event event; 

event.reg(test, 2, 2.5); 
event.reg(*[](int n, const char* foo){ cout << n << " " << foo << endl; }, 5, "rawr"); 
event.execute(); 
+0

那麼,你顯然已經在這裏使用了模板。 – ForNeVeR 2014-10-05 03:03:37

相關問題