使用另一个结构扩展struct成员

时间:2014-12-23 17:04:58

标签: c++ struct extending

我没有提出新的问题,而是通过完全删除前一个来编辑这个问题,希望能减少它的混乱。

文字墙。

我有一个具有一些基本值的基本结构,例如图像宽度,高度以及x和y位置,如下所示:

struct obj {
    int id = 0;
    float x = 0;
    float y = 0;
    int image_w = 0;
    int image_h = 0;
    int depth = 0;
}

然后我有一个初始化函数,它创建该结构的成员并将它们存储在一个数组中。如果该数组名为" instance"然后只需执行以下操作即可访问单个成员及其值:instance [number] .x etc ..

然后我有一个或两个处理所有这些成员的循环,并按照深度值的顺序执行,在struct中定义并在初始化函数中设置。像这样(简化):

for (i=0;i<maxdepth;i++) {
    if (instance[n].depth == i) { doStuff; }
}

&#34; doStuff&#34;功能我检查成员&#39;在switch语句中使用id值,然后让它们在case标签内做任何我想做的事情;这使我可以选择在同一个结构中有一些单独的行为。这就是问题所在。虽然这很好用,但我不能在某些成员中拥有单独的固定(或起始)变量而没有每个成员具有相同的变量,并且显然有足够的成员,这最终会导致一个结构非常大而且有很多冗余;资源浪费。例如,我希望一些成员拥有速度和方向变量,但不想将它们提供给不需要它们的相同结构的静态成员。

问题是,如何在不改变使用结构的基本思想的情况下实现这种效果,还是有更好的选择呢?

我很抱歉格式化和所有;这是我在这个网站上的第一个问题。

1 个答案:

答案 0 :(得分:2)

  

我对结构的理解是,访问其各个变量所需的时间越长。

你的理解从根本上是错误的。结构的大小对访问该结构中的单个变量所需的时间几乎没有影响(如果有的话)。

然而,无论如何,构建数据的基本想法使得一个结构包含(或拥有指向)一些其他结构,这是完全正确和合理的。

使得指针基本上没有打字是不太好或不合理的,所以它可以引用任何其他类型。如果你想要一套衣服,你可能会从clothing基础类开始,然后从中得到各种其他类型(外套,衬衫,休闲裤,牛仔裤等)。然后person类型可能包含(例如)指向clothing的指针向量,因此它可以包含指向从clothing派生的所有其他类型的指针。

至于&#34;扩展范围&#34;好吧,除了我无法理解你在那里试图说些什么之外,我不能说太多。