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

时间:2019-08-15 13:24:05

标签: c++ arrays tuples

我正在研究一个aux模块,以便在多态对象之间传递值,并且在某个时候已经有了

std::array<void*, N>

并且需要转发

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

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

此外,以防万一-我是否正确std::array的布局是各个对象的密集集合,因此可以说,例如,void**的各个长度,而元组的布局允许差距?

1 个答案:

答案 0 :(得分:17)

如果您的实现支持它,则可以使用std::tuple_cat。在某些实现中,它将遵守元组接口(std::array这样做)的任意数量的对象连接到单个平面元组中。连接单个类似元组的对象只会产生一个元组,其中包含所述源“元组”成员的副本。

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

此外,以防万一-我是否正确std::array的布局是各个对象的密集集合,因此可以说,例如,void**的各个长度,而元组的布局允许差距?

std::array是一个聚合,它将在内部保存void*[N]。因此,是的,元素之间将没有填充。未指定元组元素的布局。