我正在研究一个aux模块,以便在多态对象之间传递值,并且在某个时候已经有了
I am working on a aux module to pass values between polymorphic objects and at some point I have
std::array<void*, N>并且需要转发
std::tuple<void*, void*, /* N times */>我可以通过使用 index_sequence 或/和递归来找到一些解决方案,但是所有这些看起来都很笨重且难以阅读.通过标准库,还有其他更直接的方法吗?
I can figure some solution with the use of index_sequence or/and recursions, but all of those look bulky and difficult to read. Is there any more straightforward way to do this by the means of the standard library?
另外,以防万一-我是对的, std :: array 的布局是各个对象的密集集合,因此,等于 void ** 各自的长度,而元组的布局允许有间隙吗?
Also, just in case - am I right that the layout of std::array is a dense set of respective objects, thus equal to, lets say, void** of respective length, whereas the layout of tuple allows gaps?
推荐答案如果您的实现支持,则可以使用 std :: tuple_cat .在某些实现中,它将尊重元组接口( std :: array 确实这样做)的任意数量的对象连接到单个平面元组中.连接一个类似元组的对象只会产生一个元组,其中包含所述源元组"成员的副本.
If your implementation supports it, you can use std::tuple_cat. Under some implementations it concatenates any number of objects that respect the tuple interface (which std::array does) into a single flat tuple. Concatenating a single tuple like object will just produce a tuple that holds copies of the members of said source "tuple".
std::array<void*, N> a; auto b = std::tuple_cat(a);另外,以防万一-我是对的, std :: array 的布局是各个对象的密集集合,因此,等于 void ** 各自的长度,而元组的布局允许有间隙吗?
Also, just in case - am I right that the layout of std::array is a dense set of respective objects, thus equal to, lets say, void** of respective length, whereas the layout of tuple allows gaps?
std :: array 是一个聚合,它将在内部保存 void * [N] .因此,是的,元素之间将没有填充.未指定元组元素的布局.
A std::array is an aggregate the will hold a void*[N] internally. So yes, the elements will be without padding in between them. The layout of the tuple's elements is not specified to such an extent.
更多推荐
如何将std :: array转换为std :: tuple?
发布评论