错误:静态断言失败:std::thread 参数在转换为右值后必须是可调用的
Posted
技术标签:
【中文标题】错误:静态断言失败:std::thread 参数在转换为右值后必须是可调用的【英文标题】:error: static assertion failed: std::thread arguments must be invocable after conversion to rvalues 【发布时间】:2019-07-31 13:16:47 【问题描述】:我正在尝试向 std::thread 添加一个 std::function 并且偶然发现了这个错误
error: static assertion failed: std::thread arguments must be invocable after conversion to rvalues
struct Foo
explicit Foo(const std::function<void(int)>& tfunc)
: thread(tfunc) //<----- error points here
thread.join();
std::thread thread;
为什么这不起作用?
【问题讨论】:
你为什么不直接使用thread(tfunc)
?
@NathanOliver 这是我尝试的第一件事,但错误是一样的
调用线程 ctor 时缺少初始整数值:thread(std::ref(tfunc), 123)
。线程体函数取整数,需要在线程启动时提供。
@rafix07 当然
【参考方案1】:
调用thread ctor时缺少初始整数值:thread(std::ref(tfunc), 123)。
线程体函数取整数,需要在线程启动时提供。
【讨论】:
以上是关于错误:静态断言失败:std::thread 参数在转换为右值后必须是可调用的的主要内容,如果未能解决你的问题,请参考以下文章
std::thread 使用带有 ref arg 的 lambda 编译失败
std::unique_ptr 作为参数在 std::thread 中起作用 [重复]
如何修复此错误:偏移参数包含 NaN 值。 'dart:ui/painting.dart':断言失败:第 43 行:'<优化输出>'