C++ 从模板参数中解压参数包

2024-05-12

如何实现下面我想要的?我要解压的参数包不在函数参数列表中,而是在模板参数列表中。

#include <iostream>
#include <array>

const std::size_t SIZE = 10;

template <int...ARGS>
std::array<bool, SIZE> func() {
    std::array<bool, SIZE> b;
    // I want to set b[n] = true, where n takes on all values from ARGS...
    // what to put in here???
    return b;
}

// Example of what I want to achieve:
int main() {
    const std::array<bool, SIZE> b = func<1,3,7>();
    // I want b[1]==true, b[3]==true, b[7]==true, all others false
    for (int x: b) std::cout << x << std::endl;
}

我必须使用这种形式的 func (而不是 func(1,3,7))才能让我的更大的程序正常工作(我正在处理多重继承问题)。


递归模板解决方案:

// recursive helper struct
template <int n, int First, int ...Rest>
struct helper {
  static void funcImpl(std::array<bool, SIZE>& temp) {
    temp[First] = true;
    helper<n - 1, Rest...>::funcImpl(temp);
  }
};

// partial specialization to catch base case
template <int First>
struct helper<0, First> {
  static void funcImpl(std::array<bool, SIZE>& temp) {
    temp[First] = true;
  }
};

template <int ...Args>
std::array<bool, SIZE> func() {
    std::array<bool, SIZE> b = {}; // 0 inititalize array
    helper<sizeof...(Args) - 1, Args...>::funcImpl(b);
    return b;
}

EDIT:受 iavr 解决方案启发的超级简化版本:

template <int... A>
std::array<bool, SIZE> func() {
    std::array<bool, SIZE> b = {};
    auto values = {A...};
    std::for_each(values.begin(), values.end(), [&](int n){b[n] = true;});
    return b;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 从模板参数中解压参数包 的相关文章

  • 用于代数简化和求解的 C# 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 网络上有很多代数求解器和简化器 例如 algebra com 上不错的代数求解器和简化器 然而 我正在
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 循环浏览 Bootstrap 3 jumbotron 的背景图像

    我正在尝试获取 3 个图像作为 Bootstrap 3 jumbotron 的背景循环播放 但问题是我在大屏幕中有 3 个 div 到目前为止我尝试过的所有解决方案都要求我将大屏幕的位置更改为相对位置 将背景图像更改为绝对位置 而且因为我试
  • 开玩笑错误意外的令牌...(ES6)

    每当我在命令行中运行 jest 时 都会收到以下错误 Test suite failed to run Users
  • 使用“g++”会导致“警告:永远不会被执行”

    我继承了一个C 项目 我正在建设RHEL https en wikipedia org wiki Red Hat Enterprise Linux5 5 通过 makefile 使用 GCC 4 1 2 该项目非常庞大 数百个文件 并且总的
  • 使用 QuartzCore 为 UITextView 创建阴影 [重复]

    这个问题在这里已经有答案了 我使用创建了一个阴影QuartzCore for my UITextView使用以下代码 myTextView layer masksToBounds NO myTextView layer shadowColo
  • PDO dblib 未捕获警告

    我已经使用 realestateconz mssql bundle 和免费 TDS 成功使我的 symfony 应用程序连接到 MSSQL 数据库 我的问题是 当我尝试执行存储过程时 如果出现问题 该过程会引发异常 但 PDO 不会报告任何
  • 尽管 JPA Converter 可用,但 org.hibernate.MappingException

    我有一个自己的 Id 类型 public class Id
  • 如何在 OpenCV 中从 YUV 文件读取帧?

    如何在 OpenCV 中从 YUV 文件读取帧 我编写了一个非常简单的 python 代码来从二进制文件读取 YUV NV21 流 import cv2 import numpy as np class VideoCaptureYUV de
  • Javascript 函数指针,以参数作为函数中的参数

    不确定标题的措辞是否正确 或者是否有更好的表达方式 但我认为还可以 无论如何 到目前为止我了解以下内容 a b a b c foo 其中 foo 是在其他地方定义的函数 不接受任何参数 只会导致函数 a b 使用上述参数运行 然后可以在函数
  • 使用 Python 开发时保护 MySQL 密码?

    我正在编写一个使用本地托管的 MySQL 数据库的 Python 脚本 该程序将以源代码形式提供 这样 MySQL 密码就肉眼可见 有没有好的办法来保护这个呢 这个想法是为了防止一些顽皮的人查看源代码 直接访问 MySQL 并做一些事情 好
  • 找不到文件异常..但它就在那里

    嘿 这将是那些愚蠢的问题之一 我试图在本地系统上获取一个文件 但我不断收到FileNotFoundException thrown 请有人纠正我 if File Exists C logs hw healthways prod 2009 0
  • 如何绑定到仅检查复选框?

    我有一个复选框 我正在使用 jquery 我想在用户选中复选框时弹出一个对话框 但是 如果他们取消选中该框 则不会弹出任何内容 我怎样才能做到这一点 另外 我需要使用 jquery live 或 livequery 因为页面加载时不会显示复
  • 如何从 httpclient 调用中获取内容正文?

    我一直在试图弄清楚如何读取 httpclient 调用的内容 但我似乎无法理解 我得到的响应状态是 200 但我不知道如何获取返回的实际 Json 这就是我所需要的 以下是我的代码 async Task
  • 从 python 执行 C++ 代码

    我是 python 的初学者 我不知道这是否可行 我在 python 中有一个简单的循环 它为我提供当前目录中的所有文件 我想要做的是从 python 执行我之前在目录中的所有这些文件上编写的 C 代码 建议的 python 循环应该是这样
  • 使用旧的 ruby​​gems 版本进行捆绑安装

    我遇到的问题似乎与1个月前的问题 https stackoverflow com questions 38279896 rubygems 2 0 14 is not threadsafe bunder install message whe
  • 开源隐形 reCAPTCHA 替代方案 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有像 Google 的 Invisible reCAPTCHA V2 这样接近或最好的开源解决方案
  • 如何在Unix中将相对路径转换为绝对路径[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想转换 相对路径 home stevin data APP SERVICE datafile txt to 绝对路径 home stev
  • 从分离的头进行 Git 推送

    我以超然的态度做出了一些改变 我想用 Git 将这些更改推送到这个独立的头 我不希望我的更改进入开发分支 当然也不想进入主分支 我正在与另一个人一起处理一个文件 分支示例 develop master HEAD detached at or
  • 用css制作一个加号[重复]

    这个问题在这里已经有答案了 我有一个模型 用于制作看起来非常简单的加号 然而 我的 CSS 技能并不是很好 制作圆圈没什么大不了的 但在里面制作加号我似乎无法弄清楚 这就是我正在尝试做的事情 Mockup 这是我目前拥有的 到目前为止 这是
  • 节点异步循环 - 如何使该代码按顺序运行?

    我知道有几个关于此的帖子 但根据我发现的那些帖子 这应该可以正常工作 我想在循环中发出 http 请求 并且不希望循环迭代 直到触发请求回调 我正在使用异步库 如下所示 const async require async const req
  • C++ 从模板参数中解压参数包

    如何实现下面我想要的 我要解压的参数包不在函数参数列表中 而是在模板参数列表中 include