【发布时间】:2018-01-15 18:12:10
【问题描述】:
void thread_func(Color& r)
{
//
}
void f()
{
Color r(red_state);
thread t(thread_func, r);
t.join();
}
简化。我在网上找不到任何与这种特定情况相匹配的东西(传递给非成员线程函数的类对象)。我尝试了一些建议(添加 '&'、std::ref(r)、使用向量等),但我不断收到以下错误:
error: no type named 'type' in 'class std::result_of<void (*(Color*))(Color&)>'
error: use of deleted function 'Color::Color(const Color&)'
后者让我认为它与复制构造函数有关,但我认为通过引用传递它不应该影响它?任何提示或反馈将不胜感激。
【问题讨论】:
-
以下评论中引用的 AMA 示例有效。您可以添加您的功能以找出它在哪里中断。显然,您的附加代码(此处未显示)使用复制构造,该构造已在
Color类中删除。如果我们没有看到整个代码,我们不能告诉你为什么。与第一个错误相同。 -
你可以让线程的例程成为一个通过引用捕获对象的 lambda。
标签: c++ multithreading