当我尝试调用以下构造函数时,将其传递给静态成员函数不会收到任何错误,但是当我将其传递给非静态成员函数时则会出现编译错误:
构造函数
template <class callable, class... arguments>
Timer(int after, duration_type duration, bool async, callable&& f, arguments&&... args)
{
std::function<typename std::result_of<callable(arguments...)>::type()>
task(std::bind(std::forward<callable>(f), std::forward<arguments>(args)...));
}
发票
Timer timer(252222, duration_type::milliseconds, true, &MotionAnalyser::ObjectGarbageCollector); // Does not work because it does not point to object too.
Timer timer(252222, duration_type::milliseconds, true, std::bind(this, &MotionAnalyser::ObjectGarbageCollector)); //Should work, but does not?!?!
错误
Error C2039 'type': is not a member of 'std::result_of<callable (void)>'
到目前为止,我有:
std:function
的使用方式,结果发现
与可调用类型结合使用时,调用对象应为
可调用类型,因为我过度使用()
运算符(根据我的
了解可调用类型。std::bind
答案 0 :(得分:1)
您向后调用bind
,它首先获取可调用对象(在这种情况下为成员函数的指针),然后再获取参数。
std::bind(&MotionAnalyser::ObjectGarbageCollector, this)
但是,查看Timer
的构造函数,您应该能够传递这些参数,因为它们仍然受到约束:
Timer timer(252222, duration_type::milliseconds, true,
&MotionAnalyser::ObjectGarbageCollector, this);