初始化结构数组

时间:2015-04-21 18:09:12

标签: c++ arrays struct initialization

我有一个这样的课程:

class Wall
{
    private :
        Quad faces[6];  
};

我有这样的构造函数:

Wall::Wall(Quad f[], const float &mass, Vector3 center)

我想将面初始化为f(或将f复制到面),Quad是没有默认构造函数的结构。

现在我通过在初始化列表中使用面{f [0],f [1],f [2],f [3],f [4],f [5]}来解决问题,但这需要c ++ 11,我担心我的一些朋友没有它,我需要将我的代码传递给他们。

有许多类似的问题,但除了切换到矢量或使用一些我不想要的复杂代码之外,所有这些问题似乎都没有其他解决方案,正如您可以从课程中理解的那样。名字,墙不需要矢量(它只有6个面,所以为什么是矢量)。

这真的无望吗?有什么办法吗?

PS

无论是在构造函数体中还是在初始化器列表中,它都无关紧要。

更改为动态数组(Quad *)并不重要,但最好保留静态数组。

1 个答案:

答案 0 :(得分:1)

有几种选择。最简单的可能是将Quad子类化为具有默认构造函数的东西:

  def list = Session_plan.list()
  results.each { session_plan->
  println "session_id = ${sessions_plan.session_id}"
  }

另一个选择是使用新的位置 - 请注意,下面的代码没有开箱即用,因为它没有正确对齐/填充并处理一些别名问题,这些问题留给了读者。它应该给你一个起点。

class Wall {
public:
  Wall(Quad f[], ...) {
    for (int i = 0; i < 6; ++i) faces[i] = f[i];
  }
private:
  class MyQuad : public Quad {
    MyQuad() : Quad(...) {}
  }

  MyQuad faces[6];
};