我正在研究一个aux模块,以便在多态对象之间传递值,并且在某个时候已经有了
std::array<void*, N>
并且需要转发
std::tuple<void*, void*, /* N times */>
我可以通过使用index_sequence
或/和递归来找到一些解决方案,但是所有这些看起来都很庞大且难以阅读。
通过标准库,还有其他更直接的方法吗?
此外,以防万一-我是否正确std::array
的布局是各个对象的密集集合,因此可以说,例如,void**
的各个长度,而元组的布局允许差距?
答案 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]
。因此,是的,元素之间将没有填充。未指定元组元素的布局。