如何将 std::array 转换为 std::tuple?

问题描述 投票:0回答:1

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

std::array<void*, N>

并且需要转发

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

我可以使用

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

另外,以防万一 - 我是否正确,

std::array
的布局是各个对象的密集集合,因此等于,比方说,各自长度的
void**
,而元组的布局允许间隙?

c++ arrays tuples
1个回答
21
投票

如果您的实现支持它(c++23 之前可选,但现在是强制的),您可以使用

std::tuple_cat
。它将任意数量的遵循元组接口(
std::array
所做的)的对象连接到单个平面元组中。连接单个元组之类的对象只会生成一个元组,其中保存所述源“元组”的成员的副本。

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

另外,以防万一 - 我是否正确,

std::array
的布局是各个对象的密集集合,因此等于,比方说,各自长度的
void**
,而元组的布局允许间隙?

A

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

© www.soinside.com 2019 - 2024. All rights reserved.