可变参数模板异构容器

2023-12-13

我需要使用异构元素实现一些可变模板容器类,它允许迭代这些元素。我的第一个想法是使用带有可变参数的 std::tuple 成员创建类,但是通过类似数组的方式(通过循环)从元组获取元素是不可能的:

struct A {void prnt(){std::cout<<"A\n";} };    
struct B {void prnt(){std::cout<<"B\n";} };    
struct C {void prnt(){std::cout<<"C\n";} };

template<typename...Arg>
struct Prc
{
    Prc() : NumElems(sizeof...(Arg)), mems(std::make_tuple(Arg()...)){}

    int NumElems;
    std::tuple<Arg...> mems;

    void process()
    {
        for(int i=0; i<NumElems; ++i)
         std::get<i>(mems).prnt();//It's forbidden: "i" must be a constant
    }
};

int main()
{
    Prc<A,B,C> obj;
    obj.process();
}

有任何想法吗?

附:我不想使用 boost 异构容器,例如增强::变体 or 提升::任何


这是使用索引完成的:

namespace detail
{
    template <int... Is>
    struct index { };

    template <int N, int... Is>
    struct gen_seq : gen_seq<N - 1, N - 1, Is...> { };

    template <int... Is>
    struct gen_seq<0, Is...> : index<Is...> { };
}

template <typename...Args>
struct Prc
{
    std::tuple<Args...> mems;

    template <int... Is>
    void process(detail::index<Is...>)
    {
         auto l = { (std::get<Is>(mems).prnt(), 0) ... };
    }

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

可变参数模板异构容器 的相关文章

  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中

随机推荐

  • 有没有办法使用最新的 Facebook 应用程序评论来获得 Facebook read_stream 权限?

    我正在开发社交网络 iPhone 应用程序 其中我们有 facebook 作为选项之一 我们必须显示用户的提要 但为此我需要read stream允许 不幸的是 我们的应用程序尚未经过验证 这是我们从 Facebook 审核团队收到的消息
  • 如何从因重新启动而离开的位置继续安装?

    在安装某些软件包期间重新启动后如何继续安装程序 实际上 我已经使用构建了一个项目的安装程序包WiX 捆绑包 有不同的包要安装在链中 但是当它安装微软时Windows安装程序4 5 msi 它将重新启动电脑 重新启动后 我希望安装继续 我怎样
  • 在python中使用bing或google API获取位置坐标

    这是我的问题 我有一个示例文本文件 我在其中通过抓取各种 html 页面来存储文本数据 该文本包含有关各种事件及其时间和地点的信息 我想获取这些位置的坐标 我不知道如何在 python 中做到这一点 我正在使用 nltk 来识别此示例文本中
  • Android - 方向变化时的动态片段问题

    我在动态片段方面遇到问题 如果我不改变方向 它就可以正常工作 当我改变方向时 我单击 ListView 项目 这不是改变 textview 这是 DynamicActivity 类 public class DynamicActivity
  • Selenium 无法启动 IE。

    Selenium 无法启动 IE 10 56 25 005 INFO org openqa selenium server SeleniumDriverResourceHandler Command request getNewBrowse
  • Angular HTTP 循环 [重复]

    这个问题在这里已经有答案了 我对 Angular 应用程序有疑问 我有一个包含语言短代码的数组 en fr 基本上 我希望 Angular 在该数组上循环并对每个值发出 HTTP get 请求 for var i in scope lang
  • 当内容类型为文本/纯文本时,.NET Core 1.0 Web Api 将请求正文处理为 JSON

    我需要使用的供应商 API 正在发送内容类型为 text plain 且正文中为 JSON 的 POST 请求 如何在 net core 1 0 web api中解析它 我确定我需要做类似的事情this 下面的代码 答案 但我不知道如何在
  • 使用 Flexbox 在 Bootstrap3 轮播中垂直居中内容

    我试图将 h3 和 p 元素集中在 div 中 更准确地说是 Bootstrap 的 carousel caption 我已经给 carousel caption 固定的高度和宽度 我试图将 h3 和 p 垂直对齐到 theid 父 div
  • COM 类工厂错误

    我一直在使用我的机器作为服务器来测试应用程序 一切都很顺利 但是当我尝试将其设置为在测试服务器上运行时 出现以下错误 检索 COM 类工厂 CLSID 为 XXXX 的组件因故障而失败 出现以下错误 80040154 有任何想法吗 Than
  • 小于给定数字并且没有重复数字的数字数量

    我们怎样才能找到小于给定数字并且其中没有重复数字的数字的个数 例如 小于100的此类数字的数量为90个 11 22 33 44 55 66 77 88 99有重复数字 因此被排除 同样 对于小于 1000 的数字 如 101 110 122
  • Target="_blank" 与 window.open

    我正在开发一个应用程序 用户输入一些输入 并且在单击共享链接时不应该离开页面 例如Facebook 分享链接 a href https www facebook com sharer php u http 3A 2F 2Fwww examp
  • 如何获取 Go html/template 中地图元素的结构字段?

    我有一个结构Task type Task struct cmd string args string desc string 我初始化了一张采用上述内容的地图Taskstruct 作为一个值和一个string作为键 任务名称 var tas
  • html 中真的需要 name 属性吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 如果 HTML 表单中 name 属性的目的只是为了引用诸如 input 之类的元素 为什么我们不能简单地使用 id 或 class 属性呢 创建名称属性背后是否有一些不那么明显的推
  • CodeIgniter Sqlite 不工作

    每当我在模型中像这样查询数据库 sqlite 时 我使用 codeigniter 完整代码如下 this gt db gt select post query this gt db gt get posts return query gt
  • 如何提取不起作用的 .apk 文件的代码? [复制]

    这个问题在这里已经有答案了 实际上 我试图提取名为 cloudfilz apk 的 apk 文件的代码 并希望在其源代码中进行操作 因此我按照以下步骤操作 创建一个新文件夹并放入 apk 文件 您要解码的 现在用扩展名 zip 重命名此 a
  • 将字体导入 GUI

    除了 swing 似乎附带的基本 5 种字体之外 我正在尝试更改 GUI 的字体 如何导入字体并在我的代码中实际使用它们 默认情况下通常有 5 个以上可用 但它们会因系统而异 该答案检查现有字体 以及如何加载和注册新字体 它使用 Airac
  • Java 的迁移[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我使用 ruby on Rails 和 Java 当我从事 Rails 项目时 我真的很喜欢使用迁移 所以我想知道是否有类似 Java 的迁移工具
  • 我应该为 Selenium By.XPATH 导入什么?

    新版本的 Selenium 没有任何旧方法 例如 find element by xpath 但它引入了新的 fabrique 方法 find element By XPATH searched string 这是来自的示例文档 veget
  • 多种语言一起编译

    是否可以将多种语言一起编译 以便充分利用不同语言的优点 绝对有可能link如果编译器和链接器全部兼容 则在单独编译它们之后将它们放在一起 如果适当编程 例如 g77 c one f gcc c two c gcc o together on
  • 可变参数模板异构容器

    我需要使用异构元素实现一些可变模板容器类 它允许迭代这些元素 我的第一个想法是使用带有可变参数的 std tuple 成员创建类 但是通过类似数组的方式 通过循环 从元组获取元素是不可能的 struct A void prnt std co