传递给线程的 lambda 内的调用函数

2023-12-01

我正在尝试创建一个对象,可以为它的构造函数提供一个函数及其参数。然后,此类将在 lambda 中调用给定函数,并将该函数传递给线程。类似的东西

class worker {
public:
    template <class Fn, class... Args>
    explicit worker(Fn f, Args ... args) {
        t = std::thread([&]() -> void {
                f(args...);
        });
    }
private:
    std::thread t;
};

int main() {
    worker t([]() -> void {
        for (size_t i = 0; i < 100; i++)
            std::cout << i << std::endl;
    });

    return 0;
}

但我收到以下错误

error: parameter packs not expanded with '...': f(args...);

我在这里做错了什么?任何帮助,将不胜感激。


正如评论中所述,可以使用 gcc-4.9 (及更高版本)编译,但如果您需要使用 gcc-4.8,您可以将参数添加到 lambdaworker构造函数并通过传递参数std::thread构造函数:

class worker {
public:
    template <class Fn, class... Args>
    explicit worker(Fn f, Args ...args) {
        t = std::thread([f](Args ...largs) -> void {
                f(largs...);
        }, std::move(args)...);
    }
private:
    std::thread t;
};

这还将在 lambda 参数中创建参数的副本,这与您使用的通过引用捕获不同[&]在这种情况下这可能是不正确的(参见@Yakk 评论)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

传递给线程的 lambda 内的调用函数 的相关文章

随机推荐

  • Unicode 组合字符的实际最大数量是多少?

    我正在寻找在非组合字符之后出现的 unicode 组合字符的最大数量在现实的自然文本中 我知道在 unicode 文本中 文本中的任何位置都可以放置任意数量的组合 但是 我正在编写一个专门的应用程序 该应用程序必须在资源有限的情况下运行 并
  • React - 从同级组件调用函数

    假设我有一个组件树 如下所示
  • 在基于 iframe 的文本编辑器中禁用 Firefox 和 Chrome 拼写检查

    有很多关于如何禁用 html 中的拼写检查的信息textarea元素通过使用spellcheck false 然而 要使文本区域具有更高级的功能 必须使用iframe with designMode on 参见例如这一页 这是在 GWT 中
  • 使用 C# 错误,可空对象必须具有值 datetime

    我在 C datetime 中遇到一个问题 我已经尝试了很多时间 它不是 给出问题的解决方案 所以给我一个解决方案 var accommodationcategoryList EmployeeAttendanceCacheMaster Ge
  • sprintf():作为参数的小数位数

    目前的解决方案是 dp lt 2 sprintf paste0 dp f 0 123 期望的解决方案没有 Paste0 并且类似于 sprintf 2 d f 0 123 2L 除了它有效之外 您可以使用 插入dp进入格式 dp lt 2
  • 使用“push”或“sub”x86 指令时,堆栈内存是如何分配的?

    我已经浏览了一段时间 我试图了解在执行以下操作时如何将内存分配给堆栈 push rax 或者移动堆栈指针为子例程的局部变量分配空间 sub rsp X Move stack pointer down by X bytes 我的理解是 堆栈段
  • 我可以信任 imageres.dll 系统图标索引吗?

    我制作了一个自定义目录树控件 它使用从中提取的系统图标imageres dll文件 我的意思是该文件是从 Windows 目录中读取的 因此根据 Windows 版本 该文件会有多个版本 下面是确切的 C 片段 ImageList Imag
  • javascript 中的 MM/DD/YYYY HH:MM:SS AM/PM 日期验证正则表达式

    我正在尝试在 JavaScript 中验证 MM DD YYYY HH MM SS AM PM 格式的日期 我无法找到任何好的答案 尝试了其他结果但没有成功 在以下问题中 asp net 已提出此问题 但 javascript 未提出此问题
  • ajax请求不同的主机

    我的网页中有以下 JavaScript var xhr new XMLHttpRequest xhr open GET http www google com true xhr onreadystatechange function if
  • SPARK - 在数组中的值上连接 2 个数据帧

    我找不到一种简单而优雅的解决方案来解决这个问题 我有一个 df1 与此列 guitars array nullable true element long containsNull true 我有一把吉他制成的 df2 还有一个与我的 df
  • 在 HTML 中查找单词

    我试图在 HTML 字符串中找到给定的单词并在其周围添加一个跨度 我现在正在做的是这样的 function find what String where String var regexp RegExp new RegExp what gi
  • JTable 不显示列名称

    这是我的代码 public class DownloadMainView extends JFrame private ArrayList
  • 如何通过 Windows API 访问系统规格?

    如何从 Windows API 访问有关计算机规格的信息 我需要查看注册表吗 如果需要的话 在哪里 我希望我的程序能够访问的一些关键信息包括显卡型号和规格 支持的 OpenGL 和 DirectX 版本 支持的屏幕分辨率 CPU 信息 总
  • SQL批量复制内存问题

    我们在 C 中使用 SqlBulkCopy 类 在sql中插入批量数据 我们有一个包含 1000 万条记录的表 我们正在循环中批量插入 10 000 条数据 我们面临物理内存问题 内存增加而不是减少 下面是我们的代码 当使用sql批量复制时
  • 使用 Zenhub API 从 Github 问题创建史诗

    这是一个后续问题如何使用 zenhub 设置问题管道 我正在尝试在 Python 脚本中将问题转换为史诗 我可以将问题转换为史诗 但当我尝试在创建史诗时添加问题时 出现错误 这有效 zenhub headers X Authenticati
  • 使用 Google Checkout 轮询 API 验证 Android 应用内购买时出现延迟

    我正在尝试使用 Google Checkout API 从我的服务器验证 Android 应用内购买 根据另一个查询 Android 市场上的应用程序 没有 HTTP 通知 我没有收到回调 所以我使用轮询 API 它工作正常 只是在轮询收到
  • BackgroundWorker 线程必须是 STA

    我有一个BackgroundWorker来调用一个函数来在BackgroundWorker DoWork上执行一个很长的过程 当函数中发生错误时我会提示一个自定义的消息框 WPFMessageBoxResult result WPFMess
  • 双击突出显示单元格值以进行复制

    我有一个jqGrid 我想突出显示一行 ondbClickRow 中的特定单元格 这将使用户能够轻松地将单元格的值复制到剪贴板 有人可以指导我如何做到这一点吗 谢谢 一般来说这是可能的 但您可能应该关闭行选择以立即看到突出显示 所以代码如下
  • mod_rewrite 删除 GET 变量

    我正在尝试采取 example com home lang fr foo bar 并重定向到 example com fr home foo bar I tried RewriteCond QUERY STRING lang a z 2 R
  • 传递给线程的 lambda 内的调用函数

    我正在尝试创建一个对象 可以为它的构造函数提供一个函数及其参数 然后 此类将在 lambda 中调用给定函数 并将该函数传递给线程 类似的东西 class worker public template