错误:静态断言失败: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 中起作用 [重复]

c++ std::thread 与静态成员挂起

为什么断言不能用于公共方法中的参数检查?

如何修复此错误:偏移参数包含 NaN 值。 'dart:ui/painting.dart':断言失败:第 43 行:'<优化输出>'

使用 std::thread 函数 C++11 将指针作为参数传递