如何扩展integer_sequence?

2024-01-01

我有一个如下所示的函数:

template <typename T, std::size_t... I>
std::ostream& vector_insert(std::ostream& lhs, const char* delim, const T& rhs, std::index_sequence<I...>) {
    std::ostream_iterator<float> it(lhs, delim);

    ((*it++ = at(rhs, I)), ...);
    return lhs;
}

这是我最后的尝试,但我的扩展仍然失败integer_sequence https://en.cppreference.com/w/cpp/utility/integer_sequence我希望有人能告诉我如何写一行有效地扩展为:

*it++ = at(rhs, 0U), *it++ = at(rhs, 1U), *it++ = at(rhs, 2U)

我尝试过的其他事情是:

  1. *it++ = at(rhs, I...)
  2. *it++ = at(rhs, I)...
  3. (*it++ = at(rhs, I))...

他们所有人都给我错误:

错误C3520:I:参数包必须在此上下文中扩展

我如何扩展这个东西?

EDIT:

@AndyG 指出 https://stackoverflow.com/questions/56603262/how-do-i-expand-integer-sequence#comment99782756_56603262这似乎是一个视觉工作室2017 /questions/tagged/visual-studio-2017 bug.


这看起来像是 Visual C++ 的编译器错误。除了简化扩展参数包的表达式之外,我不知道有任何简单的修复方法。转换为递归方法似乎可以可靠地解决该问题。例如 :

#include <array>
#include <iostream>
#include <iterator>

template <typename T>
const auto& at(const T& v, size_t i) { return v[i]; }

// End of recursion
template<class T>
void vector_insert_impl(std::ostream_iterator<int> &, const char*, const T&)
{}

// Recursion case
template<class T, std::size_t N, std::size_t... I>
void vector_insert_impl(std::ostream_iterator<int> & iter, const char* delim, const T&rhs)
{
    *iter++ = at(rhs, N);

    // Continue the recursion
    vector_insert_impl<T, I...>(iter, delim, rhs);
}

template <typename T, std::size_t... I>
std::ostream& vector_insert(std::ostream& lhs, const char* delim, const T& rhs, std::index_sequence<I...>) 
{
    std::ostream_iterator<int> it(lhs, delim);

    // Call the recursive implementation instead
    vector_insert_impl<T, I...>(it, delim, rhs);

    return lhs;
}

int main() {
    std::array<int, 5> v = { 1, 2, 3, 4, 5 };
    vector_insert(std::cout, " ", v, std::make_index_sequence<v.size()>());
}

这里是参数包I仅在提供模板参数的情况下进行扩展,而 VC++ 对此没有任何问题。

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

如何扩展integer_sequence? 的相关文章

  • 如何使用 VS2022 中的新控制台应用程序模板访问命令行参数

    我想知道如何访问命令行参数 因为这是在Program cs通过 Visual Studio 2022 中控制台应用程序的新模板创建文件 See https aka ms new console template for more infor
  • 在 C++ 中,当我将值传递给函数时,它是否总是转换为适当的类型?

    如果我有一个像这样的函数void func size t x 我称该函数为func 5 5 立即转换为size t类型 这通常适用于所有类型吗 我问这个问题是因为我发誓我见过人们编写代码 他们做类似的事情func 5 0 将 5 作为双精度
  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • 是否可以通过引用以基类作为参数的函数来传递派生类

    假设我们有一个抽象基类IBase使用纯虚方法 接口 然后我们推导出CFoo CFoo2来自基类 我们有一个知道如何使用 IBase 的函数 Foo IBase input 这些情况下通常的场景是这样的 IBase ptr static ca
  • 不能使用函数名称距离

    以下代码可以正常编译 include
  • 如何在Qt中更快地读取数据?

    Qt读取数据库比C 慢吗 我想我错过了一些东西 为了比较阅读速度 我在 Qt 中编写了以下内容 QElapsedTimer t t start int count 0 QString cs Driver SQL Server Server
  • 如何自定义 ASP.Net Core 模型绑定错误?

    我只想从我的 Web API Asp net Core 2 1 返回标准化的错误响应 但我似乎不知道如何处理模型绑定错误 该项目刚刚从 ASP NET Core Web 应用程序 gt API 模板创建 我有一个简单的操作定义为 Route
  • std::async 参数的生命周期是多少?

    看来函数的参数是通过std async分享未来的生活 include
  • 如何(可移植地)在 C 和 C++ 中获取 DBL_EPSILON

    我正在 Linux AS 3 上使用 GCC 3 4 并试图找出DBL EPSILON 或者至少是一个不错的近似值 我怎样才能以编程方式获取它 在 C 中是std numeric limits
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 验证域用户凭据

    我需要一种方法来验证 Windows 上本机 C 的用户 密码对 输入的是用户名和密码 用户可以是 DOMAIN user 格式 基本上我需要编写一个函数 如果用户 密码是有效的本地帐户 则返回 true 第1部分 如果用户 密码在给定的域
  • 将华氏温度转换为摄氏度的 C 程序始终打印零

    我需要一些关于用 C 语言将华氏温度转换为摄氏度的程序的帮助 我的代码如下所示 include
  • 来自资源中 ImageSource 的 System.Drawing.Image

    我的问题与这个非常相似 wpf图像资源以及运行时在wpf控件中更改图像 https stackoverflow com questions 940592 wpf image resources and changing image in w
  • std::iota 的 iota 代表什么?

    我假设 i 是增量 a 是分配 但我无法弄清楚或找到答案 而且 它看起来与非标准非常相似itoa我认为这很令人困惑 C iota is not an acronym or an initialism It is the word iota
  • 不兼容的指针到字符转换

    我正在编写一个程序 将卡片值写入 52 个点字符的多维数组中 该程序是一个测试数组 稍后我将其作为函数写入主程序中 在程序中 我通过以下方式初始化 for 循环计数0通过51 我用一个switch语句调制13将卡牌值分配给数组点 但是 我收
  • 为什么 char 数组需要 strcpy 而 char star 不需要 - 在 C 中使用结构

    我对这段代码有一个误解 typedef struct EXP int x char name char lastName 40 XMP main XMP a a name eaaa a lastName strcpy a lastName
  • 如何正确地将十六进制转义添加到字符串文字中?

    当你有C语言的字符串时 你可以在里面直接添加十六进制代码 char str abcde a b c d e 0x00 char str2 abc x12 x34 a b c 0x12 0x34 0x00 这两个示例在内存中都有 6 个字节
  • 使texture2D在运行时/脚本Unity3D中可读[重复]

    这个问题在这里已经有答案了 我有一个插件 可以让我访问 Android 手机图库中的图片 这给了我一个Texture2D类型的纹理 然后我想使用 GetPixels 函数对其进行编辑 但默认情况下它未设置为可读 如何使纹理可读 以便我可以在
  • C# 中的快速字符串解析

    在 C 中解析字符串最快的方法是什么 目前我只是使用字符串索引 string index 并且代码运行合理 但我忍不住认为索引访问器所做的连续范围检查必须添加一些东西 所以 我想知道我应该考虑哪些技术来增强它 这些是我最初的想法 问题 使用
  • File.Move 的原子性

    我想将目录中的文件重命名为原子事务 该文件不会更改目录 该路径作为 NTFS 文件系统的 UNC 路径提供 可能位于服务器 03 或 08 上 File Move 对于这些目的来说是原子的吗 例如 它要么成功完成 要么失败 以使原始文件仍然

随机推荐

  • IBM Worklight 6.1 开发者版下载链接

    我正在尝试从市场或谷歌下载 IBM Worklight 6 1 但我看不到任何相同的结果 任何人都可以分享 IBM WL 6 1 的链接以及如何将修复包升级到 6 1 0 1 我也在寻找开发者版本 由于 6 2 已发布 我只能看到 6 2
  • Altair 结合多个数据集

    我最近才知道Vega Vega Lite and Altair并将其视为最佳 Python 绘图工具的真正竞争者 我目前正在努力解决的问题是将两个数据帧中的信息绘制到共享一个或两个轴的同一个图表中 我尝试过类似的事情 plot1 alt C
  • 如何使用正则表达式匹配不在两个特殊字符之间的内容?

    我有一个像这样的字符串 a b c a b a b b a a 我如何匹配每一个a不是由以下分隔的字符串的一部分 我想匹配这里粗体的所有内容 a bc a乙 乙 乙a a 我想替换这些匹配项 或者通过用空字符串替换它们来删除它们 因此删除匹
  • 如何在 Spring-Web 中使用 RestTemplate 解析 gzip 编码响应

    我修改后使用 RESTful Web 服务 https spring io guides gs consuming rest 调用示例通过id获取用户 https api stackexchange com docs users by id
  • 如何使用 cv2.createButton 在 OpenCV 3.1 中制作按钮?

    我正在尝试向图像处理脚本添加一个按钮 以保存二进制阈值的高 HSV 值和低 HSV 值 根据OpenCV 3 0文档here http docs opencv org 3 0 beta modules highgui doc qt new
  • 如何将 jquery.Validate 与 jquery.multiselect 下拉菜单一起使用?

    所以情况是这样的 尝试使用添加下拉框jquery multiselect http www erichynds com jquery jquery ui multiselect widget 当前使用的表单上的插件jquery 验证 htt
  • 按需发布时的最佳(您认为)GIT 工作流程(在大多数情况下一次 1-2 个票证)

    我是一个 Git 新手 我正在寻求你的建议 在我工作的公司中 我们有一个 工作流程 其中我们的项目有一个 Git 存储库 有 2 个分支 master and prod 所有开发人员都致力于master分支 如果票证完成 从开发人员的角度来
  • Python Tkinter 输入小部件不接受输入

    我在 Tkinter 条目小部件方面遇到了一个非常奇怪的问题 当我尝试向其中输入内容时 他们不接受我的输入 在重新启动电脑并重新安装 Python 之后 我弄清楚了为什么会发生这种情况 在root mainloop 在代码中 代码看起来像这
  • 拆分 SAS 数据集

    我有一个 SAS 数据集 如下所示 id dept 1 A 2 A 3 A 4 A 5 A 6 A 7 A 8 A 9 B 10 B 11 B 12 B 13 B 每个观察代表一个人 我想将数据集分成 团队 数据集 每个数据集最多可以有 3
  • 为什么我不能从 long 中导出?

    我的函数返回一些长值 其中包含低 32 位和高 32 位中的两个值 我认为处理返回值的最佳方法 是从 long 派生我的自定义类型并提供 类型扩展器 例如 GetLowerValue GetHigherValue 问题是 NET 不允许从
  • XGBOOST:sample_Weights 与scale_pos_weight

    我有一个高度不平衡的数据集 想知道在哪里考虑权重 因此我试图理解之间的区别scale pos weight论证中XGBClassifier和sample weight的参数fit方法 如果可以同时使用这两种方法或者如何选择其中一种方法 我们
  • 增加ggplot2中axis.title和axis.text之间的间距(版本> = 0.9.0)

    我目前正在使用 github 上的最新版本的 ggplot2 在 0 8 9 版本中 我可以执行以下操作来增加 axis title 和 axis text 之间的空间 Before ggplot diamonds aes clarity
  • 如何在使用 asm 库进行检测的方法中查找空的局部变量

    在为其不同方法检测类时为了使方法在文本文件中执行写入操作 我首先将字符串存储在显式定义的局部变量 3160 中 如何选择这些变量以防止与已有变量发生冲突 就像这段代码一样 代码每次进入任何方法时都会将类名写入文本文件 为了做到这一点 必须使
  • 如何将 tfjs-node 与从源代码构建的 libtensorflow 结合使用

    我看到可以使用libtensorflow如自述文件中所述 是从源代码构建的https github com tensorflow tfjs node optional build libtensorflow from tensorflow
  • C/C++ 中负数返回 false 吗?

    在 C C 中将整数评估为布尔值时 负数是真还是假 无论编译器如何 它们总是正确 错误吗 所有非零值将被转换为true 和零值false 当负数非零时 它们会被转换为true 引用 C 11 标准 强调我的 4 12 布尔转换 conv b
  • 制作锁子甲背景主题

    我想制作一个像这样的锁子甲 我尝试过使用线性渐变 但似乎不起作用 background linear gradient 0c0c0c 222222 important 我希望输出与 imgur 中显示的图像类似 线性渐变有用吗 你可以这样做
  • 对 BITMAPINFO (HBITMAP) 中像素数据的原始/直接访问

    我试图弄清楚如何从屏幕访问原始像素信息 到目前为止 我一直将屏幕捕获到 HBITMAP 填充 BITMAPINFO 然后创建此 BITMAPINFO 变量的指针以直接从内存读取 我知道必须从文件中 删除 标头 因此我将指针直接前进到位图数据
  • Express.js - 有什么方法可以显示文件/目录列表?

    With Express js http expressjs com 有没有一种方法可以像 apache 一样显示文件 目录列表 当您访问没有索引文件的目录的 URL 时 它会显示所有该目录内容的列表 是否有一个我不知道的扩展或包可以执行此
  • 调用未定义的方法 Illuminate\Database\Query\Builder::notify()

    发行于拉拉维尔 5 3 6当在忘记密码中提交请求时 错误详情 调用未定义的方法 Illuminate Database Query Builder notify 问题在以下文件中 供应商 laravel framework src Illu
  • 如何扩展integer_sequence?

    我有一个如下所示的函数 template