将函数作为参数与std :: thread类似

时间:2014-10-05 02:07:48

标签: c++

是的,这是怎么做到的?

我查找的东西具有非常具体的定义功能。首先,我不知道如何使用va_arg列表调用该函数。对于两个人,我不知道它应该是什么样子。

我希望能够做到

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

对于任何不使用模板的函数,就像std::thread一样。

我该怎么做?

1 个答案:

答案 0 :(得分: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();