根据给定的索引集获取参数包的子集

2024-05-05

好吧,这确实是一件困难的事情。

我希望能够通过在给定的一组有效索引处选择参数类型来获取参数包的子集,然后使用该参数包作为函数的参数列表。 IE:

template <size_t... indices_t>
void func(pack_subset<indices_t..., args_t...>); //incorrect syntax,
                                                 //not sure how else to write this
                                                 //args_t is predetermined, this
                                                 //function is a static member of
                                                 //a variadic class template

//For a parameter pack <float, double> and index set 0
void func(float); // <- result of template

我可以获取单个索引的类型,但一组索引有点困难,特别是当该组的大小可变时。其语法是:

pack_index<size_t index_t, typename... args>::type

也许我可以将一堆这些串在一起,但我不确定如何扩展indices_t,以便为列表中的每个值获得一个pack_index。


如果将参数包装到一个元组中,那就非常简单了:

#include <tuple>

template <typename T, std::size_t ...Is>
struct selector
{
    using type = std::tuple<typename std::tuple_element<Is, T>::type...>;
};

输入示例:<int, double, float, char, bool>, 1, 3

#include <iostream>
#include <demangle.hpp>

int main()
{
    std::cout
        << demangle<selector<std::tuple<int, double, float, char, bool>, 1, 3>::type>()
        << std::endl;
}

Output:

std::tuple<double, char>

您需要做的就是使用std::tuple<args_t...>你刚刚在哪里args_t...眼下。


这是将这个想法构建为更容易处理的另一种想法:

template <typename ...Args> struct selector
{
    using T = std::tuple<Args...>;

    template <std::size_t ...Is>
    static void call(typename std::tuple_element<Is, T>::type ...args)
    {
        // ...
    }
};

Usage:

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

根据给定的索引集获取参数包的子集 的相关文章

随机推荐

  • 找不到 jni.h 文件 - 在 OS X El Capitan 上安装 node-java 模块

    我正在尝试安装node java允许 Node js 连接到现有的模块Java蜜蜂 这是我用来安装此模块的命令 须藤 npm 安装 java g 这是我收到的错误的堆栈跟踪 gt email protected cdn cgi l emai
  • SPARQL 为缺失字段生成值

    我正在尝试编写一个 SELECT 它为我提供表中的所有值 我有可选值 我希望用标准值填充它们 如果它们不存在 这是我的代码 SELECT WHERE a nmo hasObject nm coin OPTIONAL a nmo hasAut
  • ruby - heroku:找不到命令

    这个问题已经发布了 但答案还没有起作用 我应该顺便提一下 我对红宝石完全陌生 我在做教程时遇到了错误步骤如下 first app master gem install heroku I get Successfully installed
  • Laravel ErrorException:未定义的变量:\storage\framework\views\ 中的错误

    我尝试使用 redis 队列来延迟发送邮件 但每次都会收到错误 ErrorException 未定义的变量 错误 C wamp64 www laravel boltra storage framework views c653bafa95f
  • 可能的 PDOException 错误(MySQL 5)?

    因此 我正在为我的网络应用程序设置一个安装程序 并具有数据库凭据的输入字段 我的验证过程的一部分包括测试数据库连接 使用 PHP 的 PDO 库 如果连接失败 我希望能够区分错误的密码 错误的地址 不存在的数据库名称等 以便我可以引用表单上
  • 使用 ProGuard 混淆 clojure uberjar

    我想知道是否有人有使用 proguard 混淆他们的 leiningen 编译的 uberjar 的经验 我已经尽力在谷歌上寻找解决方案 但找不到真正的答案 我想知道这是否可能 我一直在尝试混淆默认的 lein 项目 这是 core clj
  • 如何检查 char 数组是否有空单元格以便我可以在其中打印 0?

    Code public void placeO int xpos int ypos for int i 0 i lt 3 i for int j 0 j lt 3 j The line below does not work what ca
  • 如果为 false,则停止在自定义验证器中执行

    我有两个文本框作为 to date 和 from date 我比较两个文本框并获取值 但它的执行在我想要停止的按钮的单击旁边进行 因为如果 to date 小于起始日期 则截止日期将变为空 并且重点关注文本框不会转到的单击事件按钮 i us
  • 从绝对路径加载类

    我有一个类 我想通过绝对路径加载该类 但我收到 ClassNotFoundException 我经历过很多这样的线程 发现从绝对路径加载类是不正确的 InputStream stream new Check getClass getReso
  • 从非 Activity 类启动一个新 Activity

    我想在非 Activity 类中启动一个新活动 该活动实现DialogListener以下是我的代码 public class FacebookLoginDialog implements DialogListener Override p
  • 将二维数组绑定到数据网格中

    所以我的情况是我想从数据库中的两个字段填充一个二维数组 我在为数组分配数据库字段值时遇到问题 第二个是在数据网格中显示数组 我已经编码了 dgv2 Datasource myArray 但它仍然返回错误消息 这是我的代码 Dim msql
  • Mac上使用docker安装gitlab的权限问题

    我正在尝试让 Gitlab 在本地运行 但遇到了权限问题 cp cannot create regular file etc gitlab gitlab rb Permission denied 我正在运行的命令是 sudo docker
  • 如何在 Android 中自定义进度条

    我正在开发一个应用程序 我想在其中展示ProgressBar 但我想替换默认的AndroidProgressBar 那么我该如何定制ProgressBar 我需要一些图形和动画吗 我阅读了以下帖子 但无法让它工作 Android自定义进度条
  • 有没有办法从 ANSI 转义字符创建橙色?

    我正在寻找一个控制代码来使用 ANSI 或其他标准在终端中创建橙色文本 这可能吗 我只看到黄色和红色可用 并且我认为您不能将红色和黄色混合用于同一角色 严格来说 不 ANSI 从未标准化任何被称为 橙色 的东西 对于终端的控制序列 有些终端
  • 为什么 CGPath 和 UIBezierPath 在 SpriteKit 中对“顺时针”的定义不同?

    在 SpriteKit 中 clockwise方向相反UIBezierPath但不是为了CGPath 例如 如果我有 do let path CGPathCreateMutable CGPathAddArc path nil 0 0 10
  • React router 如何点击查看详细组件

    我有两个组件 Car 和 CarDetails 我想用超链接 link 来显示 cars 组件中的所有汽车 当用户单击时 它应该将 carid param s 传递给 CarDetails 组件 App js import React Co
  • Python Pandas - “loc”和“where”之间的区别?

    只是对 where 的行为以及为什么要使用它而不是 loc 感到好奇 如果我创建一个数据框 df pd DataFrame ID 1 2 3 4 5 6 7 8 9 10 Run Distance 234 35 77 787 243 543
  • Visual Studio中设置“目标框架”有什么作用

    在 Visual Studio 中 您可以为项目设置 目标框架 或多或少的常识是 如果将 目标框架 设置为 例如 NET 4 5 2 则应用程序在仅安装了 NET 4 5 1 的计算机上将无法运行 第一个问题 这是真的吗 第二个问题 该设置
  • 该捆绑包在 Mac OS X 上无效

    我在将应用程序上传到应用程序商店时遇到问题 每次我将应用程序上传到苹果时 它都会显示 无效的二进制文件 因此我尝试在 Xcode Organizer 中验证存档的应用程序 但收到此错误 该捆绑包无效 Apple 目前不接受使用此版本 SDK
  • 根据给定的索引集获取参数包的子集

    好吧 这确实是一件困难的事情 我希望能够通过在给定的一组有效索引处选择参数类型来获取参数包的子集 然后使用该参数包作为函数的参数列表 IE template