我正在尝试实现一些将在一段时间后完成的任务类。目前我必须实现类,例如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);