我有一个这样的课程:
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个面,所以为什么是矢量)。
这真的无望吗?有什么办法吗?
无论是在构造函数体中还是在初始化器列表中,它都无关紧要。
更改为动态数组(Quad *)并不重要,但最好保留静态数组。
答案 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];
};