说我想在a中存储三种类型 tuple
: int
, float
和 std::vector<double>
如果我把后续接口的问题放在一边,这样做
tuple<int, float, vector<int>> t;
与此有任何不同
tuple<vector<int>, int, float> t;
由于执行 tuple
作为一类可变基数,我期待一个 不同的布局 对于制作的课程,但是 这有什么关系吗? ?在将类型放入a时,还需要考虑任何优化注意事项 tuple
(例如把最大的第一个等)?
该标准不对类型的实际布局施加任何限制。订单影响的唯一因素是结果 std::get<N>
, std::tuple_element<N, T>
等等。
我知道libstdc ++和Visual C ++按照给定顺序的相反顺序排列类型; libc ++按给定顺序列出类型。这实际上意味着没有可移植的方式来选择始终产生最佳布局的订单。
但是,其他订单也是可能的。允许实现 使用总是产生最小尺寸的布局来实现元组 但仍保留相同的语义 std::get<N>
等等。但是,我不知道有任何标准的库实现。
该标准未指定实现 std::tuple
。但它保证 std::tuple<A,B,C>
应该是一个与例子不同的类型 std::tuple<B,A,C>
。 std::tuple
是一个有序的类型列表。
boost::fusion
在订单不重要的情况下,为类型的集合样式容器提供数据类型: boost::fusion::set<>
该标准没有具体说明如何 tuple
应该实现并且完全有可能实现重新排序参数以产生更好的布局,同时保留语义 std::get<int N>
。但是,我不知道任何实际执行此操作的实现,因为在生成良好布局的顺序中排列一组类型很困难。
参数的不同顺序可能会产生不同的布局。如果这很重要取决于您的用例。如果要在此进行优化,则应考虑目标体系结构的大小限制(附加填充)和缓存行大小。