【问题标题】:Initialize array of tuples where tuple element requires previous element as ctor arg初始化元组数组,其中元组元素需要前一个元素作为 ctor arg
【发布时间】:2014-04-08 17:36:41
【问题描述】:
using namespace std;
...
array<tuple<X, Y, Z>, 3> = {make_tuple(X(), Y(get<0>(???)), Z()), ...

这显然不起作用,因为我无法在 get() 中放入任何内容,因为尚未构造元组。然而,我需要在给定数组元素的同一元组中通过类型转换从 X 初始化 Y 元素。我怎样才能做到这一点?在我的情况下,Y 只能通过 X 的这种类型转换或移动来构造;没有默认的ctor。此外,我需要一个基于堆栈的数组,所以如果不为 vector 编写堆栈分配器,我就不能使用 vector 代替,这对于应该做的事情来说是一个巨大的代码添加。

【问题讨论】:

  • 我可能只是将它们推回向量。这段代码对性能有多敏感?
  • 感谢您的回复,但是我需要堆栈上的这个结构(我们的霸主的项目要求)。当然,该语言有一些方法可以使这项工作发挥作用。
  • 嗯,Y(X()) 不起作用?
  • 你不能单独构造X, Y, Z然后std::move他们到make_tuple吗?
  • @DisplayName X x; Y y{x}; Z z; array&lt;tuple&lt;X, Y, Z&gt;, 3&gt; = {make_tuple(move(x), move(y), move(z)), ...};

标签: c++ c++11 tuples stdtuple


【解决方案1】:

单独构造 X()(请不要使用using namespace std...)

X x;
std::array<std::tuple<X,Y,Z>, 3> a { make_tuple(x, Y(x), Z()), ... };

应该可以的...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2013-11-08
    • 2015-01-28
    • 1970-01-01
    • 2016-04-27
    相关资源
    最近更新 更多