首页 > 解决方案 > 如何将 std::array 转换为 std::tuple?

问题描述

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

std::array<void*, N>

并且需要转发

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

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

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

标签: c++arraystuples

解决方案


如果您的实现支持它,您可以使用std::tuple_cat. 在某些实现下,它将任何数量的尊重元组接口(std::array确实如此)的对象连接成单个平面元组。连接一个像对象一样的元组只会产生一个元组,它包含所述源“元组”成员的副本。

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

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

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


推荐阅读