如何将元组的值转发到成员初始值设定项?

2023-12-08

我需要将元组的值转发到成员初始值设定项:

struct Struct {
  Member1 member1;
  Member2 member2;

  template<typename Tuple1, typename Tuple2>
    Struct( Tuple1&& tuple1, Tuple2&& tuple2 )
      : member1(tuple1...), member2(tuple2...)
    {}
};

上面的代码显然是无效的。我该如何表达呢?

Member1 and Member2没有默认/复制/移动构造函数。

我知道关于std::apply,如建议的如何将元组扩展为可变参数模板函数的参数?。我也知道std::make_from_tuple。但我不知道如何在成员初始值设定项中使用其中任何一个。

任何 C++ 标准都可以(最好是 C++17,但 C++20 也可以)。

澄清一下,我的真正目标是创建一个Struct,向其传递两组可变参数以完美转发它们以进行初始化member1 and member2。我认为将这两个集合“分组”为元组可能是一个好主意,因为这就是std::map::emplace做。其他方法也可以工作(例如,在两组可变参数之间传递一个特殊对象)。


std::make_from_tuple确实是正确的选择:

#include <tuple>
struct Member1 {
    Member1(int x,float y, char z){}

    Member1(const Member1& other)=delete;
    Member1(Member1&& other)=delete;
};

struct Member2 {
    Member2(int x,float y, char z){}

    Member2(const Member2& other)=delete;
    Member2(Member2&& other)=delete;
};

struct Struct {
  Member1 member1;
  Member2 member2;

  template<typename Tuple1, typename Tuple2>
    Struct(Tuple1&& tuple1, Tuple2&& tuple2)
      : member1(std::make_from_tuple<Member1>(std::forward<Tuple1>(tuple1))),
       member2(std::make_from_tuple<Member2>(std::forward<Tuple2>(tuple2)))
    {}
};

int main(){
    Struct c(std::tuple{1,1.1,'c'},std::tuple{2,2.2,'x'});
}

Godbolt 演示.

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

如何将元组的值转发到成员初始值设定项? 的相关文章

随机推荐

  • WinForms 文本框中的按钮

    WinForms 文本框是否具有任何可以在框末尾嵌入按钮的属性 就像 Chrome 地址框上的收藏夹按钮一样 我还在某些 Excel 表单中看到类似以下内容 EDIT 我按照 Hans Passant 的回答添加了一个点击事件处理程序 它似
  • 多个处理程序附加到一个事件:如何仅分离一个?

    在我正在处理的这个模块中 我有一个监听窗口中 调整大小 事件的监听器 每次运行模块时 我都需要检查是否已经有一个侦听器注册到该事件并将其分离 以避免出现不需要的行为 内存泄漏等 到目前为止一切顺利 但是 在我们正在开发的这个应用程序中 有可
  • Rails 多列上的唯一索引失败(sqlite3)

    我使用 Rails 设置了一个 HATBM 模型 其中包含一个用户表 一个组表和一个用于连接的 groups users 所有这些都使用scaffold 命令 现在我想添加一个迁移 以在表 groups users 的 group id 和
  • 为什么IDIV为-1会导致浮点异常?

    据我了解 idiv ebx将分裂edx eax 按顺序连接成 64 位值 与 32 位ebx 然而 当我尝试划分时0x00000000 0xfffffffb 0 和 5 与0xffffffff 1 我得到一个浮点异常 有人可以解释为什么吗
  • 将 PHP/MySQL 数据拆分为 3 列

    我需要使用从 MySQL 返回的数据在 PHP 中创建 3 个 HTML 列 我希望数据在所有 3 列之间均匀分配 我将如何做到这一点 你可以尝试做这样的事情 result mysql query SELECT value FROM tab
  • 查找行 NA 的数据框中的唯一性?

    我有一个如下所示的数据框 我想找到唯一的行 唯一性 但在这个数据中我有 NA 我喜欢如果一行中具有 NA 值的所有值与其他行相同 如行 1 2 5 我想忽略它 但如果不相同 如行 2 4 我喜欢保留它作为唯一行 例如 在第 1 2 和 6
  • 使用 JQuery 逐个字母淡入淡出

    我试图获取 all msg 的文本 并使用 hide 方法隐藏它 然后一次淡入一个字母 有一点延迟 这是我的代码 var all msg welcome msg function animate i all msg hide all msg
  • (Xcode 6 beta / Swift)performSegueWithIdentifier 在 segue 之前有延迟

    我刚刚第一次使用 Swift 和 Xcode 6 beta 学习 Ios 编程 我正在制作一个简单的测试应用程序 它应该调用 API 然后以编程方式转到不同的视图以显示检索到的信息 问题是segue 在我的委托方法中didReceiveAP
  • 当我“像 shell 脚本一样”运行 setuptools .egg 时,实际发生了什么?

    来自阅读本文档 我已经建立了一个关于命令内容的心理模型sh setuptools 0 6c11 py2 7 egg实际上确实如此 但它非常不完整 我仍然对某些方面感到困惑 我的思维模型是这样的 当发出这个命令时 egg 我认为它是一种巧妙处
  • jquery 的子字符串选择器?

    是否可以使用 jquery 仅选择字符串的一部分 例如我有一个文本 p Metuentes igitur idem latrones Lycaoniam magna parte campestrem p 所以现在如果用户搜索一个字符串 我希
  • C++17 静态内联成员的编译器错误

    我正在使用 Microsoft Visual Studio 2017 据我所知 它确实支持 C 17 静态内联类变量 我的问题是 如果我将所有成员保留为统一状态 它可以正常工作 但在初始化某些成员时会出现编译器错误 在以下示例中 inclu
  • 动态添加侦听器到 ajax 在 jQuery 中创建的内容

    我正在尝试获取单击的链接的 html 值 这些链接是使用 Ajax 动态创建的 所以我认为 bind 不会 工作 但我没有最新版本的 live div message click function var valueSelected thi
  • JIT编译和DEP

    我正在考虑尝试一些 jit 编译 只是为了学习 并且让它跨平台工作会很好 因为我在家运行所有主要的三个 windows os x linux 考虑到这一点 我想知道是否有任何方法可以摆脱使用虚拟内存窗口函数来分配具有执行权限的内存 如果只使
  • 关于静态持有者单例模式

    我根据挥发性 惰性单例 急切单例 普通单例以及通过枚举等条件以多种方式开发了单例 但具体来说我想了解如下所示的静态持有者模式单例 public static class Singleton private static class Inst
  • QML TableView 使用 QtQuick.Controls 2 单击行

    我在网上搜索了很多 但没有找到答案 这真的很奇怪 因为我认为这是大多数人应该使用的基本功能 可能我不明白如何正确使用表格视图 with QtQuick Controls 2 问题是 我想知道我单击了哪一行 并且我想访问该行的特定列的数据 类
  • Gmail 应用程序中的表格间隙未跨越整个宽度和高度

    经过几天的尝试寻找解决方案 未成功 我决定向社区的集体智慧和经验寻求帮助 我 我有一个电子邮件模板 可以在所有桌面 网络和移动客户端 Android 版 Gmail 应用程序除外 上正确显示 我有一个嵌套的导航表 由顶部图像 导航本身和底部
  • 如何在 pandas 中将多列折叠为一列

    我有一个填充了用户和类别的 pandas 数据框 但这些类别有多个列 user category val1 val2 val3 user 1 c1 3 NA None user 1 c2 NA 4 None user 1 c3 NA NA
  • 正则表达式仅匹配最里面的分隔序列

    我有一个包含由多个字符分隔的序列的字符串 lt lt and gt gt 我需要一个正则表达式来只给我最里面的序列 我已经尝试过前瞻 但它们似乎没有按照我期望的方式工作 这是一个测试字符串 do not match this lt
  • SSRS 2012 图表未渲染 [关闭]

    Closed 这个问题是无关 目前不接受答案 我们最近升级到 SQL Server 2012 几天前重新启动后 所有图表都停止工作 当我尝试从报告查看器控件中查看各种报告中的所有图表时 它们现在都显示为损坏的图像 左上角有一个红色 x 这种
  • 如何将元组的值转发到成员初始值设定项?

    我需要将元组的值转发到成员初始值设定项 struct Struct Member1 member1 Member2 member2 template