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

Gle*_*leb 11 c++ arrays tuples

我正在研究一个aux模块,以在多态对象之间传递值,有时

std::array<void*, N>
Run Code Online (Sandbox Code Playgroud)

并且需要转发

std::tuple<void*, void*, /* N times */>
Run Code Online (Sandbox Code Playgroud)

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

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

Sto*_*ica 17

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

std::array<void*, N> a;
auto b = std::tuple_cat(a);
Run Code Online (Sandbox Code Playgroud)

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

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

  • @SombreroChicken-说``std :: tuple_chicken`! (3认同)