-1
是的,這是如何完成的?以一個函數作爲參數類似於std :: thread
我擡頭的東西有相當具體的定義函數。首先,我不知道如何用va_arg
列表調用函數。對於兩個人,我不知道它應該是什麼樣子。
我希望能夠爲任何功能做
event.register(func, arg1, arg2, arg3, ...);
,而不使用模板,就像std::thread
做的。
我該怎麼做?
是的,這是如何完成的?以一個函數作爲參數類似於std :: thread
我擡頭的東西有相當具體的定義函數。首先,我不知道如何用va_arg
列表調用函數。對於兩個人,我不知道它應該是什麼樣子。
我希望能夠爲任何功能做
event.register(func, arg1, arg2, arg3, ...);
,而不使用模板,就像std::thread
做的。
我該怎麼做?
解決
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();
那麼,你顯然已經在這裏使用了模板。 – ForNeVeR 2014-10-05 03:03:37
'的std :: thread'做它與可變參數模板ARGS – quantdev 2014-10-05 02:10:07
乘坐['的std :: function'](HTTP:// EN。 cppreference.com/w/cpp/utility/functional/function)參數。 – 2014-10-05 02:11:11
_「不使用模板,就像std :: thread一樣。」_正如前面提到的,當然,std :: thread' ***實際上使用了模板***。也看看[完美轉發](http://stackoverflow.com/questions/7038357/make-unique-and-perfect-forwarding)。 – 2014-10-05 02:16:25