【问题标题】:How to convert std::array to std::tuple? [duplicate]如何将 std::array 转换为 std::tuple? [复制]
【发布时间】:2019-08-15 13:24:05
【问题描述】:

我正在开发一个辅助模块来在多态对象之间传递值,并且在某些时候我有

std::array<void*, N>

需要转发

std::tuple<void*, void*, /* N times */>

我可以通过使用 index_sequence 或/和递归来找到一些解决方案,但所有这些看起来都很庞大且难以阅读。
有没有更直接的方法可以通过标准库来做到这一点?

另外,以防万一 - 我是对的,std::array 的布局是一组密集的相应对象,因此等于,比如说,void** 的相应长度,而元组的布局允许间隙?

【问题讨论】:

  • 实际上不是重复的。前一个问题是关于更具体的问题,并且由于某种原因没有令人满意的答案(所以再问一遍还是有用的)。

标签: c++ arrays tuples


【解决方案1】:

如果你的实现支持它,你可以使用std::tuple_cat。在某些实现中,它将任意数量的尊重元组接口(@98​​7654324@ 所做的)的对象连接到一个平面元组中。连接一个类似元组的对象只会产生一个元组,其中包含所述源“元组”成员的副本。

std::array<void*, N> a;
auto b = std::tuple_cat(a);

另外,以防万一 - 我是对的,std::array 的布局是一组密集的相应对象,因此等于,比如说,各自长度的 void**,而元组的布局允许间隙?

std::array 是一个聚合,将在内部保存一个 void*[N]。所以是的,元素之间将没有填充。元组元素的布局没有指定到这样的程度。

【讨论】:

  • 谢谢!这正是我想要的......
  • 你是std::tuple_dog
  • @SombreroChicken - 说std::tuple_chicken
  • 我自己正在寻找这个,但 cppreference 提到它只连接元组。从未想过 std::array 也可以使用(尽管示例显示了 std::make_pair 案例)
猜你喜欢
  • 2012-05-23
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
相关资源
最近更新 更多