MSVC2013和variadic模板方法与std :: thread编译错误

时间:2015-11-28 21:52:31

标签: c++11 variadic-templates visual-c++-2013

我有一个线程管理器类,其中包含以下方法:

template <class _Fn, class... _Args>
void create_thread (_Fn&& fun, _Args&&... args)
{
    std::thread t (std::mem_fn(&MyClass::threads_entry<_Fn, _Args...>),
                    this, fun, args...);
}

template <class _Fn, class... _Args>
void threads_entry (_Fn&& fun, _Args&&... args)
{
  fun (std::forward <_Args>(args)...);
  perform_on_before_thread_exit_tasks();
}

在另一堂课中,我试图使用它。该课程有以下成员:

void make_sure_thread_created ()
{
    m_threads.create_thread (
                    &MyClass2::thread_tasks,
                    this);
}

void thread_tasks ()
{
}

我收到编译错误(MS VC2013):

error: C2064: term does not evaluate to a function taking 1 arguments

它指向这行代码:

fun (std::forward <_Args>(args)...);

我做错了吗?或者是编译器错误?这可以做些什么?...

1 个答案:

答案 0 :(得分:0)

它似乎是VC2013和VC2015编译器的错误。

解决方法:

m_threads.create_thread (
    std::bind (&MyClass2::thread_tasks, std::placeholders::_1),
    this);