我正在开发一个辅助模块来在多态对象之间传递值,并且在某些时候我有
std::array<void*, N>
并且需要转发
std::tuple<void*, void*, /* N times */>
我可以使用
index_sequence
或/和递归找到一些解决方案,但所有这些看起来都很庞大且难以阅读。另外,以防万一 - 我是否正确,
std::array
的布局是各个对象的密集集合,因此等于,比方说,各自长度的 void**
,而元组的布局允许间隙?
如果您的实现支持它(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]
的聚合体。所以是的,元素之间没有填充。元组元素的布局没有指定到这样的程度。