从模板参数

时间:2017-04-03 16:15:51

标签: c++ c++11 templates

我正在尝试实现一些将在一段时间后完成的任务类。目前我必须实现类,例如TimeoutTask(更大的任务需要)。在它的主体中我想从模板参数中获取std :: function,这个函数我将在一些额外的逻辑之后调用。问题是我无法正确“创建”这个功能。但我可以直接调用它。问题出在哪儿? (我之前没有使用太多的模板,只是简单的模板)

class TimeoutTask
{
public:
    template <class Class, class Method, class... arguments>
    TimeoutTask(int timeout, Class *obj, Method f, arguments&&... args)
    {
        // here I get error: error C2059: syntax error : '<tag>::*'
        std::function<std::result_of<decltype(obj)(Class)>::type(arguments...)> 
            task(Class::*Method, obj, std::bind(std::forward<arguments>(args)...));

        // here will be some extra logic
        // and after this extra logic I want to call 'task' somehow

        // but I can call it just by this way:
        (obj->*f)(args...);     
    }
};

用于创建此“任务”的代码:

SomeClass sc;
TimeoutTask testTask(1000, &sc, &SomeClass::someMethod, 101);

0 个答案:

没有答案