Когда я пытаюсь вызвать приведенный ниже конструктор, передав ему статическую функцию-член, я не получаю никаких ошибок, но когда я передаю ей нестатическую функцию-член, я получаю ошибку компиляции:
Конструктор
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
- Поискал для полезной информации о компиляцииошибка.