gpt4 book ai didi

c++ - 如何在C++中使用模板对象的模板成员函数创建线程

转载 作者:搜寻专家 更新时间:2023-10-30 23:52:45 25 4
gpt4 key购买 nike

我正在创建线程安全列表,但在调用线程构造函数时遇到了问题。我有一个模板类

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 是类名,multithreadlistmylist<size_t> 的对象

std::thread t1(&mylist<size_t>::for_each<void(*)(size_t)>, &multithreadlist, show<size_t>);

我得到 C2893 Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)' and C2672 'std::invoke': no matching overloaded function found

最佳答案

最简单的方法是不用理会 [member] 函数指针,而是使用带有适当捕获的 lambda 表达式:

std::thread t([&](){
multithreadlist.for_each([](auto&& data){ show(data); })
});

关于c++ - 如何在C++中使用模板对象的模板成员函数创建线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44746658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com