问题描述
我正在尝试创建一个带有指向成员函数的指针的 std::thread
,该成员函数接受 1 个参数并返回 void
。
当我创建成员函数sample1()
时,没问题。但我现在不知道如何使用 sample2()
创建线程。
class ClassName
{
public:
void handle();
private:
void sample1(size_t t1);
void (*sample2)(size_t t2);
};
ClassName::handle()
{
std::vector<std::thread> tasks{SIZE};
for (size_t i = 0; i<SIZE; ++i){
tasks.emplace_back(&MapReduce::sample1,std::ref(*this),std::ref(i));
// next line make error
// tasks.emplace_back(&MapReduce::sample2,std::ref(i));
}
}
当我尝试创建线程时:
emplace_back(&MapReduce::sample2,std::ref(i))
报错:
/usr/local/include/c++/10.2.0/thread:136:44: error: static assertion Failed: std::thread arguments must be invocable after conversion to rvalues
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)