在我的项目,我有四个结构:Node
,Ring
,Disc
,和Graph
。
Ring
包含两个Node
每个12 s的向量Disc
包含一个Ring
s的向量(一个参数告诉构造函数多少个)Graph
包含Disc
s的向量(同样,数字由参数提供)除了Graph
s之外,其他一切都正常。如果我想构造一个Disc
,我可以通过构造函数设置Ring
其包含的s数量,std::vector<Ring> rings
如下所示:
Disc::Disc(size_t r) : rings {r} {};
但是,如果我想建立一个图表,我莫名其妙地需要设置两盘的数量和环的每个光盘的数量。因此,我想我需要的是一种在正在为每个正在构造的Disc调用Ring构造函数时将参数输入到Ring构造函数的方法。我是编程新手,但是不幸的是,我还没有找到任何有关如何告诉构造函数在这种情况下该怎么做的教程。但是也许我会以完全错误的方式来解决这个问题。
我将可以使用与您在类中存储的相同类型的容器直接初始化每个类。这样一来,您不必提供其中每个都有多少个。
这是您的班级的一些组合版本。
struct Node { int x; };
struct Ring {
Ring(std::array<std::array<Node, 12>, 2> a) : nodes(std::move(a)) {}
auto begin() { return nodes.begin(); }
auto end() { return nodes.end(); }
private:
std::array<std::array<Node, 12>, 2> nodes;
};
struct Disc {
Disc(std::vector<Ring> in) : rings(std::move(in)) {}
auto begin() { return rings.begin(); }
auto end() { return rings.end(); }
private:
std::vector<Ring> rings;
};
struct Graph {
Graph(std::vector<Disc> in) : discs(std::move(in)) {}
auto begin() { return discs.begin(); }
auto end() { return discs.end(); }
private:
std::vector<Disc> discs;
};
然后,您可以Graph
一次性创建一个整个对象
Graph graph(
{ // discs
{ // disc 0
{ // rings
{ // ring 0
{ // array initialization
{ // outer array
{ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12}, // nodes 0 (inner)
{13,14,15,16,17,18,19,20,21,22,23,24} // nodes 1 (inner)
}
}
},
{ // ring 1
{
{
{25,26,27,28,29,30,31,32,33,34,35,36},
{37,38,39,40,41,42,43,44,45,46,47,48}
}
}
}
}
},
{ // disc 1
{ // rings
{ // ring 0
{
{
{49,50,51,52,53,54,55,56,57,58,59,60},
{61,62,63,64,65,66,67,68,69,70,71,72}
}
}
}
}
}
}
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句