固定大小容器到可变参数模板参数列表的转换

2023-12-24

我必须调用一个可变参数模板函数,它可以接受任意数量的参数。

template < class ... Args >
void f( Args&... args);

我想写一个小包装函数,以便我可以调用fN 个相同类型的参数包含在固定大小的容器(如 std::array)中。

目标是写一些类似的东西

std::array<int, 3> arr = {1,2,3};
wrapper(arr); // calls f(1,2,3);

我尝试使用初始化列表和std::forward但无济于事。有办法实现我想要的吗?


如果您的编译器支持 C++14,您可以按以下方式执行此操作:

template <class ... Args>
void f(Args&&... args) {
...
}

template<typename T, std::size_t N, std::size_t... I>
void wrapper_impl(std::array<T, N> const &arr, std::index_sequence<I...>) {
  f(arr[I]...);
}

template<typename T, std::size_t N, 
         typename Indices = std::make_index_sequence<N>>
void wrapper(std::array<T, N> const &arr) {
  wrapper_impl(arr, Indices());
}

现场演示 http://coliru.stacked-crooked.com/a/77aa901fc3d216db

对于基于此的C++11所以答案 https://stackoverflow.com/questions/16834851/passing-stdarray-as-arguments-of-template-variadic-function您可以编写一些额外的机器并按如下方式执行(但尚未测试):

namespace detail {
  template<std::size_t... Is>        struct seq {};
  template<std::size_t N, int... Is> struct gen_seq : gen_seq<N-1,N-1, Is...> {};
  template<std::size_t... Is>        struct gen_seq<0, Is...> : seq<Is...> {};
}

template <class ... Args>
void f(Args&&... args) {
...
}

template<typename T, std::size_t N, std::size_t... I>
void wrapper_impl(std::array<T, N> const &arr, detail::seq<I...>) {
  f(arr[I]...);
}

template<typename T, std::size_t N>
void wrapper(std::array<T, N> const &arr) {
  wrapper_impl(arr, detail::gen_seq<N>());
}

现场演示 http://coliru.stacked-crooked.com/a/7c07ffe7c9812bc1

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

固定大小容器到可变参数模板参数列表的转换 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 在 Woocommerce 3 上更新并保存订单中的订单商品

    我正在尝试更改 woocommerce 中订单项的数量 小计和总计 但我的代码似乎除了最终总计之外没有改变任何内容 这是为什么 对于我想要更改的任何订单 只有 1 个订单项 这是我更改订单项详细信息的代码 ordernum 12345 wh
  • html 表格 - 按行或列

    所有浏览器都首先支持 html 按列排列的表格吗 我知道你可以这样做 table tr td td tr table 但你能先按列建立一个表格吗 先做 cols 有什么问题吗 HTML 标准不是这样的 您创建表格 然后创建行 然后创建列 还
  • 如何在 Android 上将文件写入内部存储的文件夹?

    我编写了一种方法 该方法创建一个文件并将数据写入该文件并存储在内部存储中 当我获得文件的绝对路径或路径时 我已添加日志消息来试验文件上的操作 它显示该文件是在根目录下及其 data data mypackagename 下创建的 文件 文件
  • Tkinter 消息框没有窗口?

    我想在 ubuntu 上运行的 python 脚本中显示一个信息窗口 我正在使用以下代码 import tkMessageBox tkMessageBox showinfo Say Hello Hello World 这可行 但会显示一个空
  • 复制工作表而不创建命名范围的新实例?

    我正在使用以下代码来复制工作表 我还有一些范围在工作簿范围内的命名范围 问题是 当我进行复制时 它会创建具有新工作表范围的所有命名范围的重复项 当然一切正常 但我可能有 20 多张纸 我不需要 80 个大部分重复的命名范围 我怎样才能避免这
  • 在 iPhone 模拟器上哪里可以找到“我的文档”文件夹?

    我创建了一个名为的文本文件写入 txt在 Xamarin iOS 应用程序的 Documents 文件夹中 之后我就可以将其内容读取到控制台 var documents Environment GetFolderPath Environme
  • Python:为什么这里进程之间共享多处理锁?

    我正在尝试在进程之间共享锁 我理解共享锁的方法是将其作为参数传递给目标函数 然而我发现即使下面的方法也有效 我无法理解进程共享此锁的方式 有人可以解释一下吗 import multiprocessing as mp import time
  • 使用 SqlDataAdapter 填充 DataTable 时 CommandTimeout 不起作用

    我将 CommandTimeout 设置为 1 秒 并且没有按预期抛出 TimeoutException 我正在运行的查询大约需要 7 8 秒 但是 当我使用 ExecuteReader 执行查询而不是尝试填充数据表时 超时确实有效 我尝试
  • 如何在适用于 Windows 8 的 Visual Studio Express 2012 RC 中使用 DOM 资源管理器

    有人能够使用 DOM Explorer 来调试他们的 Win 8 应用程序吗 调试时我没有看到 DOM Explorer 选项卡 如下所述 http msdn microsoft com en us library windows apps
  • 当我从工具箱拖放用户控件时,Visual Studio 添加循环引用

    我有一个在项目 P 内定义的用户控件 C C 在我的 Visual Studio 工具箱中作为 NET Framework 组件 存在 我打开一个表单 F 也在项目 P 内定义 并将 C 放到 F 上 一旦我这样做了 Visual Stud
  • 如何在 php 中向 unix 时间戳添加 24 小时?

    我现在想在时间戳上添加 24 小时 如何找到 24 小时的 unix 时间戳编号 以便立即将其添加到时间戳中 我还想知道如何在当前时间戳上添加 48 小时或多天 我怎样才能最好地做到这一点 您可能想要添加一天而不是 24 小时 由于 以及其
  • jQuery UI Datepicker Inline - 单击提交表单

    我试图在日期选择器上单击日期时提交表单 我已成功提交 但无法将所选日期传递到表单的隐藏字段 因此 表单已提交 但日期未发送 我确信这一定很简单 但我对 js 没有经验 所以任何帮助都是值得赞赏的 这是代码
  • 如何调试 ember-cli 生成和服务的 Javascript 代码?

    使用版本 0 0 28 master e49f47e669 我刚刚开始玩 ember cli 顺便说一句 很棒的项目 使用 emberserve 启动服务器后 我查看了 Chrome Dev Tools 中的源代码 foo js Chrom
  • 查找最接近当前日期创建的记录

    我想获得有他们的记录created at最接近当前日期的日期 我怎样才能用活动记录做到这一点 where clause 您可以通过以下方式找到过去最接近的记录 Record where created at lt Date today or
  • 是否可以在 NSPredicate 中使用嵌套 SUBQUERY?

    正如你所看到的 我有两个一对多的关系 是否可以编写这样一个嵌套子查询 其中我想选择所有A 其中属于A的任何B下的任何属于C s满足特定条件 您可以将 SUBQUERY 嵌套在谓词中 但这里似乎单个 SUBQUERY 就足够了 如果ds is
  • 在我的 Haskell 代码中找不到错误

    我尝试将卷心菜 山羊 狼难题的 有效 解决方案从 Scala 转换为 Haskell 但调用时代码会抛出错误head in findSolutions因为解决方案列表是空的 所以问题似乎出在循环中的某个地方 findMoves似乎工作正常
  • R:安装 rpanel 时遇到问题

    我正在尝试安装软件包rpanel and tkrplot on RStudio 下载并安装后 我收到以下消息 downloaded 686 Kb installing source package rpanel package rpanel
  • 如何通过 HTML5 流式传输视频?

    我需要通过 HTML5 流式传输视频 这可能吗 是否有任何免费资源可以在我自己的应用程序中尝试这一点 谢谢 如果您的意思只是像 Youtube 或任何其他视频网站一样提供视频 您只需使用
  • 如何使用 FOR/LIST/DICTIONARY 推导式(而不是 SQL)来使用 Python 左外连接?

    我有两个元组 详细信息如下 t1 aa ff er t2 aa 11 er 99 我想使用类似于 SQL 的 LEFT OUTER JOIN 的 python 方法获得如下结果 res aa 11 ff 0 er 99 请在这件事上给予我帮
  • 固定大小容器到可变参数模板参数列表的转换

    我必须调用一个可变参数模板函数 它可以接受任意数量的参数 template lt class Args gt void f Args args 我想写一个小包装函数 以便我可以调用fN 个相同类型的参数包含在固定大小的容器 如 std ar