对参数包中的每个元素应用函数

2024-01-11

我有以下专门化的模板函数:

// Pass the argument through ...
template<typename T, typename U=T>
U convert(T&& t) {
  return std::forward<T>(t);
}

// ... but convert std::strings
const char* convert(std::string s) {
  return s.c_str();
}

如果我有一个可变参数模板函数,例如:

template<typename ... Args>
void doSomething(Args ... args) {
  // Convert parameter pack using convert function above
  // and call any other variadic templated function with
  // the converted args.
}

有没有办法像评论中那样使用convert函数转换参数包?

我最初的目标是能够在类似 printf 的函数中将 std::string 传递给 '%s',而不必先在字符串上手动调用 .c_str() 。但我也对一般是否可以以简单的方式完成这一点感兴趣,到目前为止我的尝试失败了。


template<typename ... Args>
void doSomething(Args ... args) {
  something(convert(args)...);
}

Where something(convert(args)...) is a 参数包扩展 http://en.cppreference.com/w/cpp/language/parameter_pack扩展到:

// pseudocode
something(convert(arg0), convert(arg1), convert(arg2), ...)

顺便说一句,你可能想采取args by 转发参考文献以避免不必要的复制并正确传播左值引用:

template<typename... Args>
void doSomething(Args&& ... args) {
  something(convert(std::forward<Args>(args))...);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对参数包中的每个元素应用函数 的相关文章

  • 如何在流星运行时编译新模板?

    如何使用 Handlebars js 在流星中运行时编译新模板 var source
  • 错误:表达式不可赋值三元运算符

    我有以下代码 MPLABX XC8 编译器给出此错误 错误 表达式不可分配 U1ERRIRbits RXFOIF uart1 oerr 1 uart1 oerr 0 这是相关代码部分 typedef union struct bool fe
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 无法在 CUDA 中找到 1 到 100 数字的简单和?

    我正在研究使用 CUDA 的图像处理算法 在我的算法中 我想使用 CUDA 内核找到图像所有像素的总和 所以我在cuda中制作了内核方法 来测量16位灰度图像的所有像素的总和 但我得到了错误的答案 所以我在cuda中编写了一个简单的程序来查
  • 使用 POST 的 HttpWebRequest 的性能

    我有一个用于测试网络服务的小工具 它可以使用 POST 或 GET 调用 Web 服务 使用POST的代码是 public void PerformRequest WebRequest webRequest WebRequest Creat
  • Windows Phone 7 - ScrollViewer 值已更改

    我一直在寻找解决方案 但无法找到正确的解决方案 我的网格宽度为 960 并且有ScrollViewer在里面 现在我想知道滚动时滚动的值 水平偏移 我找到的所有解决方案都是针对 wpf silverlight 的 它对我不起作用 Edit
  • 维护 VS Test Project 中单元测试方法之间的上下文

    我想按顺序运行以下单元测试 使用随机数字的名称 密码等创建新客户 检索刚刚创建的客户并断言其属性包含相同的随机数 对同一用户调用 ForgotPassword 函数 并使用相同的随机数作为用户名 清楚地看到 我需要生成一次随机数 并在 3
  • 大量互斥体对性能的影响

    假设我有一个包含 1 000 000 个元素的数组 以及多个工作线程 每个线程都操作该数组中的数据 工作线程可能会使用新数据更新已填充的元素 但每个操作仅限于单个数组元素 并且独立于任何其他元素的值 使用单个互斥锁来保护整个数组显然会导致高
  • main.cpp 是必需的吗?

    我试图编译一个程序cmake 我最终删除了我的main cpp文件 我刚刚将其复合到另一个包含我的项目名称的文件中 即 我刚刚将主函数剪切并粘贴到该文件中 问题是我有一个main cpp未发现错误 不确定是否在C 一个名为main cpp是
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • 如何在Windows窗体中打开进程

    我想在我的 Windows 窗体应用程序中打开进程 例如 我希望当用户按下 Windows 窗体容器之一中的按钮时 mstsc exe 将打开 如果他按下按钮 它将在另一个容器上打开 IE DllImport user32 dll SetL
  • fgets溢出后如何清除输入缓冲区?

    当输入字符串超出其预定义限制时 我遇到了 fgets 的小问题 以下面的例子为例 for index 0 index lt max index printf Enter the d string index 1 if fgets input
  • C++网络序列化[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种将 C 数据包序列化为网络流的解决方案 我在这里看到很多帖子提到人们 ACE 谷歌协议缓
  • 使用未命名命名空间而不是静态命名空间

    我可以假设在未命名命名空间中声明的对象相当于static namespace int x 1 static int x 2 FWIK 在这两种情况下 x将具有静态存储期限和内部链接 声明为的对象的所有规则也是如此static适用于未命名名称
  • c++ - <未解析的重载函数类型>

    在我的班级里叫Mat 我想要一个将另一个函数作为参数的函数 现在我有下面 4 个函数 但是在调用 print 时出现错误 第二行给了我一个错误 但我不明白为什么 因为第一行有效 唯一的区别是功能f不是班级成员Mat but f2是 失败的是
  • 如何防止 Lotus Notes 用户转发或复制通过 System.Net.Mail 发送的邮件?

    我想使用 SMTP 客户端 uiing microsft net 以 C 作为编程语言发送电子邮件 但是对于通过SMTP客户端发送的电子邮件 我们是否可以添加 禁止转发 或 禁止复制 等安全功能 我不希望电子邮件的收件人转发或复制电子邮件的
  • C++ 中的析构函数

    我的 AB h 文件中有一个构造函数 class AB private int i public AB i 0 constructor AB i 0 destructor virtual void methodA unsigned int
  • 使用通用存储库模式和流畅的 nHibernate

    我目前正在开发一个中型应用程序 它将访问不同站点上的 2 个或更多 SQL 数据库等 我正在考虑使用类似的东西 http mikehadlow blogspot com 2008 03 using irepository pattern w
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get
  • 将同步 zip 操作转换为异步

    我们有一个现有的库 其中一些方法需要转换为异步方法 但是我不确定如何使用以下方法执行此操作 错误处理已被删除 该方法的目的是压缩文件并将其保存到磁盘 请注意 zip 类不公开任何异步方法 public static bool ZipAndS

随机推荐

  • 如何在移动设备上强制桌面视图?

    如何使用 Bootstrap 在移动设备上强制显示桌面视图 我已经尝试修复viewport宽度为1024 但仍然不起作用 有什么建议吗 您只需要设置Viewport 而不是这个 响应式版本 看看这里 应该可以解决你的问题 SO bootst
  • 使用 Bash 将一大块文本回显到文件中 [重复]

    这个问题在这里已经有答案了 我需要运行一个 Bash 脚本 该脚本可以将 300 行 Groovy 脚本回显到 tmp 文件 最好的方法是什么 我当前的解决方法是将脚本文件放在网上并下载 使用heredoc语法将其他脚本嵌入到shell脚本
  • 为什么我的 rvm 不允许我切换到替代 Ruby?

    Ubuntu 已经安装了 Ruby 1 8 7 然后我安装了rvm并用它安装了Ruby 1 9 2 这是我想要使用的版本 但是 ruby v 始终返回 1 8 7 如何让 rvm 使用 Ruby 1 9 2 bxu vm bxu rvm u
  • 强类型枚举中范围解析背后的基本原理

    在强类型枚举中无条件要求显式范围解析背后的基本原理是什么 N2347 解释了与老式枚举的区别 老式枚举缺乏隐式转换 指定存储类型的能力 并且没有在周围范围内注入名称 如 C 03 它继承了 C 换句话说 写enum E1 a b c 正如C
  • 调用 LoadLibrary() 时静默捕获窗口错误弹出窗口

    调用 LoadLibrary 时是否可以静默捕获诸如 无法在动态链接库 xxx 中找到过程入口点 xxx 之类的错误弹出窗口 您可以通过调用来抑制错误弹出窗口设置错误模式 http msdn microsoft com en us libr
  • 如何查看 git 上创建多个文件的日期?

    我想查看指定目录上所有文件的 git 创建日期 添加它们的首次提交日期 我将把我的解决方案分成几个步骤 获取存储库中所有文件的列表 git ls files 这将返回存储库中所有文件的相对路径列表 获取给定文件第一次提交的 SHA 1 gi
  • 多边形斑点的中心线(二值图像)

    我有一个蠕虫的二进制图像 斑点提取效果很好 我有兴趣在斑点 蠕虫 上拟合中心线 到目前为止 我想出了这个 从多边形开始 在图像中提取斑点的轮廓之后 我应用了 voronoi 计算并丢弃了多边形 蓝色 之外的所有顶点 这给了我可以的黑色中心线
  • 如何在 Awesomium 中隐藏光标

    我试过这个
  • 如何在 Blazor 中获取客户端 IP 和浏览器信息?

    如何在 Blazor 服务器端获取 IP 地址和浏览器名称 版本等客户端信息 好吧 我今天早上遇到了这个问题 我为服务器端 Blazor 解决这个问题的方法是创建一个类 然后您可以将其作为作用域服务注入到 host cshtml 上 然后在
  • C++11 带有双参数的运算符""

    考虑 struct str str operator X long double d return str 使用 g 4 7 2 Wall std c 11 可以正常编译 但现在如果我给一个双倍 str operator X double
  • 有没有一种简单的方法可以按范围对 js 数组值进行分组?

    如果我有一个像下面这样的js数组 有没有一种简单的方法可以按范围重新分组数组值 逻辑是基于范围步长 范围步长是1 所以如果数组值连续增加1 那么应该写成 1 3 否则应该分到另一组 非常感谢 var list 1 2 3 5 6 9 12
  • 在 Android 上使用 C/C++ 库

    我编写了一个库 它通过 c c 编程语言提供了一些函数 add sub divide multi 它是使用Android NDK构建到library so中的 所以现在 我想使用Android来调用库的这些函数 我想要作为我该怎么办 Tha
  • fmap和bind的关系

    查找之后Control Monad https hackage haskell org package base 4 9 1 0 docs Control Monad html文档 我很困惑 这段话 上述法律意味着 fmap f xs xs
  • SSL 和证书密钥库

    我的 Java 程序如何知道包含证书的密钥库在哪里 或者 我如何告诉我的 Java 程序在哪里查找密钥库 以某种方式指定密钥库后 如何指定用于向客户端验证服务器的证书 SSL 属性是通过系统属性在 JVM 级别设置的 这意味着您可以在运行程
  • Firebase 上游云消息

    我已经使用设置了 XMPP 服务器这个节点JS https www npmjs com package node xcs包裹 我可以很好地发送下游消息 从 XMPP 服务器到设备 但是当我尝试发送上游消息时 服务器很少收到它 服务器上处理上
  • 无法从 git bash 运行节点

    我无法再从 git bash 终端运行节点 它可以通过 Git CMD 和标准 Windows CLI 运行 如果我尝试运行一个文件 例如node index js 或者甚至只是通过启动节点node 我返回到输入提示 但现在我看不到任何字符
  • lucene:如何执行增量索引并避免“删除和重做”

    我有一个文件夹 MY FILES 其中包含大约 500 个文件 每天都会有一个新文件到达并放置在那里 每个文件的大小约为 4Mb 我刚刚开发了一个简单的 void main 来测试是否可以在这些文件中搜索特定的通配符 它工作得很好 问题是我
  • Win7:无需重启即可更换驱动程序

    我正在 Windows 7 下调试音频驱动程序 当我需要用更新版本替换它时 我必须重新启动系统 因为尽管驱动程序已卸载 但 DriverStore 下的当前驱动程序副本仍被锁定 有没有办法避免重启 XP 上是可以的 你尝试过阻止司机吗dev
  • 通过 Lotus Notes 使用 java Apache Commons Mail 发送电子邮件

    我在使用 java 程序中的 Lotus Notes 发送电子邮件时遇到了电子邮件配置问题 我知道这非常简单 但我想我错过了一些东西 我的代码如下 import java util logging Level import java uti
  • 对参数包中的每个元素应用函数

    我有以下专门化的模板函数 Pass the argument through template