创建从可变参数模板包派生的类型元组

2023-12-28

给定一个 size_t 值列表作为可变参数模板参数包,如何根据参数包以这样一种方式生成派生类型(例如矩阵)的元组,即可变参数的第 n 个元素生成Matrix<n, n+1>。例如:

make_matrix_tuple<2,3,4,5>() == make_tuple( Matrix<2,3>, Matrix<3,4>, Matrix<4,5> );

如何编写接受 size_t 参数包的 make_matrix_tuple 函数?

我所说的派生类型并不是指继承,而是指依赖(?)。我不确定正确的术语是什么。
解压参数包很简单

template <typename ElementType, size_t... Sizes>
void make_tuple_of_vectors() { std::tuple < std::array<ElementType, Sizes> ... > tuple; }

不过,我相信对于下一部分我有点不知所措。 我试图从参数包中递归地解压一对参数,如下所示:

template <typename Type, size_t size1, size_t size2>
struct dummy_matrix
{
    size_t SIZE1 = size1;
    size_t SIZE2 = size2;
    using type = Type;
};

template <size_t Iterator, typename ElementType, size_t T, size_t... Sizes>
struct unpack_two
{
    using type = typename unpack_two<Iterator - 1, ElementType, Sizes...>::type;
};

template<typename ElementType, size_t T, size_t T2, size_t... Sizes>
struct unpack_two<0, ElementType, T, T2, Sizes...>
{ 
    using type = dummy_matrix<ElementType, T, T2>;
};

So that unpack_two<N, Type, Sizes...>::type给出第 N 个和第 (N+1)n 个矩阵类型.
这样,我就陷入了对我来说似乎合理的事情,但编译器却强烈反对。

template <size_t... Sizes, size_t... Is>
auto
foo_impl(std::index_sequence<Is...>) {
    std::tuple < unpack_two<Is, float, Sizes ... >::type ... > tuple; 
    return tuple; 
}
template <size_t... Args>
void foo()
{
    auto vs = foo_impl<Args...>(std::make_index_sequence<sizeof...(Args)-1>{});
}
int main() { foo<6,9,12>(); }

我正在尝试解压列表std::size_tunpack_two 模板的大小,然后解压std::index_sequence为了std::make_tuple().
我希望能解释一下为什么我的尝试失败了,或者甚至是std::index_sequence正确的工具在这里。但我最感兴趣的是所提出问题的任何解决方案。


如何根据参数包以这样一种方式创建派生类型(例如矩阵)的元组,即可变参数的第 n 个元素生成Matrix<n, n+1> [?]

也许使用constexpr std::array在辅助函数中?

一个例子

#include <array>
#include <tuple>
#include <utility>

template <std::size_t, std::size_t>
struct Matrix
 { };

template <std::size_t ... Ds, std::size_t ... Is>
auto mmt_helper (std::index_sequence<Is...>)
 {
   constexpr std::array ca { Ds... };

   return std::make_tuple(Matrix<ca[Is], ca[Is+1u]>{}...);
 }

template <std::size_t ... Ds>
auto make_matrix_tuple ()
 { return mmt_helper<Ds...>(std::make_index_sequence<sizeof...(Ds)-1>{}); }

int main ()
 {
   auto mt = make_matrix_tuple<2,3,4,5>();

   using T1 = decltype(mt);
   using T2 = std::tuple<Matrix<2u, 3u>, Matrix<3u, 4u>, Matrix<4u, 5u>>;

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

创建从可变参数模板包派生的类型元组 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 用于 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
  • WPF 数据绑定到复合类模式?

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

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 如何在 Swift 中创建范围?

    在 Objective c 中 我们使用 NSRange 创建范围 NSRange range 那么如何在 Swift 中创建范围呢 更新为 Swift 4 Swift 范围比NSRange 并且它们在 Swift 3 中并没有变得更容易
  • Jetpack Compose 线圈预载

    我想将图像加载到启动屏幕上 以便我可以使用线圈将请求结果设置到其他屏幕上的背景 但我无法在线圈中完全实现这一点 如何将线圈请求的结果保存到 Cahce 并在其他屏幕上使用该结果 启动画面 val imageLoader ImageLoade
  • HTML 电子邮件的图像地图、Safari 和 Gmail 出现问题

    我有一个奇怪的问题 我正在发送一封 html 电子邮件 其中包含一些图像映射链接 我的问题与 Gmail 和 Safari 相关 奇怪的是 从 Gmail 及其图像映射 查看的电子邮件在 Firefox IE 和 Chrome 中运行良好
  • Swing 多列组合框

    目前 我正在寻找一个可以放置在我的 Java Swing 应用程序中的多列组合框组件 目前 我使用组合框作为用户键入时的自动完成下拉列表 是否有任何可用的 GUI 组件 使我能够拥有以下内容 多列 正如您所看到的 下拉列表中有 3 列 而不
  • Vim 错误 E492 - 不是编辑器命令:PluginInstall

    我正在尝试在我的 Macvim 上安装 Vundle 我遵循以下link https github com gmarik Vundle vim获取 Vundle 我还配置了我的 vimrc 文件 但是当我尝试 PluginInstall 时
  • React 中的内联样式在打印模式下不起作用

    div 所以 color index 是十六进制颜色 例如 ffffff 我可以在网络浏览器中看到正确的颜色 但由于某种原因 这在打印预览中不起作用 我尝试添加 蓝色 而不是颜色 索引 这在网络浏览器中有效 但它没有更新打印预览 我认为内联
  • Android GC - LogCat 始终显示 GC 活动

    当我运行程序时 logcat 显示大量 GC 活动 like GC freed 10324 objects 510376 bytes in 103 ms GC freed 10324 objects 510376 bytes in 103
  • 通过 wine metaeditor.exe 通过命令行编译 MQL4

    我试图达到可以通过命令行进行编译 语法检查的程度 这样我就可以避免使用元编辑器进行代码管理 我正在使用这个命令 也尝试使用 s 和 log wine metaeditor exe compile MQL4 Experts MACD Samp
  • 无法在跨 Windows 10 版本的 NavigationView 项目模板中实现相同的行为

    我对尝试在 UWP 应用程序中实现相同的视觉行为感到非常沮丧 这是我的问题 我正在使用 NavigationView 并且想从 ViewModel 提供 NavigationViewItem 我还想提供标头 因此我创建一个 ICollect
  • 如何转义列别名中的方括号? [复制]

    这个问题在这里已经有答案了 以下产生错误 SELECT 1 AS dada daa Msg 105 第 15 级 状态 1 第 190 行 字符串 dada daa 消息 102 第 15 级 状态 1 第 190 行 dada daa 附
  • Rails 加密/解密

    我需要在我的 Rails 应用程序中进行加密和解密 我尝试使用 ezcrypto 但每当我解密时都会收到此错误 OpenSSL Cipher CipherError in ProfilesController show wrong fina
  • 克隆 github 项目的部分内容[重复]

    这个问题在这里已经有答案了 可能的重复 有没有办法只克隆 git 存储库子目录 https stackoverflow com questions 600079 is there any way to clone a git reposit
  • 给定起始坐标、方位和距离,查找目的地坐标

    I m looking at the formula listed here http www movable type co uk scripts latlong html http www movable type co uk scri
  • JSON 编码和解码

    我有一个像这样的数组 Array utm source gt website utm medium gt fbshare utm campaign gt camp1 test cat gt red test sub gt Category
  • 如何在 rake 任务中使用“gets”?

    每当我尝试在 rake 任务中使用函数 gets 时 都会收到错误 有办法让它发挥作用吗 错误提示 没有这样的文件或目录 rake 任务名称 问题是Kernel gets http ruby doc org core 2 0 Kernel
  • 尝试 lint 我的 gitlab-ci.yml(版本 13.8)时出现 401 Unauthorized

    从周一开始 我无法使用 gitlab 的 lint CI API 该 API 已记录在此处https docs gitlab com ee api lint html validate the ci yaml configuration h
  • 如何在 Bash 脚本中将字符串作为 AWK 中的参数传递

    我有一个要过滤的文本文件 使用 awk 文本文件如下所示 foo 1 bar 2 bar 0 3 bar 100 qux 1033 我想在 bash 脚本中使用 awk 过滤这些文件 bin bash input file input my
  • 如何在 Vue.js 中解除数组副本的绑定

    我正在尝试将一个数组复制到另一个数组并像新数组一样使用它 而不对旧数组进行任何更改 div div class form group div div
  • 如何在 PyCharm 中设置 Django 项目

    我是这个领域的新手 所以我有一个问题 最近 我开始使用 Python 和 Django 我安装了 PyCharm 社区版作为我的 IDE 但无法创建 Django 项目 我找了一些教程 有一个选择 项目类型 的选项 但在最新版本中缺少这个选
  • 创建从可变参数模板包派生的类型元组

    给定一个 size t 值列表作为可变参数模板参数包 如何根据参数包以这样一种方式生成派生类型 例如矩阵 的元组 即可变参数的第 n 个元素生成Matrix