【发布时间】:2017-11-28 12:32:44
【问题描述】:
我正在创建线程安全列表,但调用线程构造函数时遇到问题。 我有一个模板类
template <typename T>
class mylist{...}
用 T 数据存储节点,mylist 的成员函数定义如下
template <typename FUNC>
void for_each(FUNC f){...}
为列表中的每个 T 数据调用 f()。 我也有功能
template<typename T>
void show(T data)
{cout<<data<<", ";}
我的问题是我不知道如何制作线程并将这个函数传递给它。
我试过这样(mylist是类名,multithreadlist是mylist<size_t>的对象
std::thread t1(&mylist<size_t>::for_each<void(*)(size_t)>, &multithreadlist, show<size_t>);
我得到 C2893 无法专门化函数模板“未知类型 std::invoke(_Callable &&,_Types &&...)”和 C2672“std::invoke”:找不到匹配的重载函数
【问题讨论】:
-
我无法使用 MSVC、Clang 或 GCC 重现错误。你能发布一个 MCVE 吗?
标签: c++ multithreading templates syntax constructor