2014-12-23 5 views
-2

Вместо того, чтобы задавать новый вопрос, я отредактирую это, полностью стирая предыдущий, надеясь сделать его менее запутанным.Расширение элемента структуры с другой структурой

Стена с текстом.

У меня есть основная структура, которая имеет некоторые базовые значения, такие как ширина изображения, высоту и х и у позиций, например так:

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

Я тогда иметь функцию инициализатора, которая создает член этой структуры и сохраняет их в массиве. Если этот массив называется «экземпляр», то отдельные члены и их значения могут быть доступны, просто сделав это: instance [number] .x и т. Д.

Тогда у меня есть петля или два, которые обрабатывают все эти элементы и делают это в порядке их значения глубины, определенных в структуре и заданных в функции инициализации. Как так (упрощенно):

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

В функции «DoStuff» Я проверяю значение И.Д. членов в распределительном заявление, а затем попросите их сделать то, что я хочу, внутри ярлыки дела; это дает мне возможность иметь какое-то индивидуальное поведение внутри одной и той же структуры. И вот здесь проблема. Хотя это работает очень хорошо, я не могу иметь отдельные фиксированные (или начальные) переменные внутри определенных членов, без каждого члена, имеющего те же самые переменные, и, очевидно, с достаточным количеством членов, это в конечном итоге приводит к структуре, которая просто нежелательно большая и имеет много избыточности; потраченные впустую ресурсы. Например, я хочу, чтобы некоторые члены имели переменные скорости и направления, но не хотели бы предоставлять их статическим членам той же структуры, которая им не нужна.

Вопрос в том, как я могу достичь этого эффекта без изменения фундаментальной идеи использования структур или есть ли более эффективная альтернатива для этого?

И прошу прощения за форматирование и все; это мой первый вопрос на этом сайте.

+0

Кодовые примеры того, что вы хотите (даже в не компилируемом псевдокоде, пока вы его заявляете) намного лучше, чем рассказывать длинные истории в прозе. –

+2

Если это короткая история, я боюсь увидеть длинную историю :) –

+0

Я не пытаюсь быть смешным или что-то еще, но * assing * a struct into another - не такая хорошая идея. Не делайте этого, плохие вещи случаются, когда вы пытаетесь это сделать. –

ответ

2

Мое понимание структур заключается в том, что чем больше времени, тем больше времени требуется для доступа к его отдельным переменным.

Ваше понимание в корне ошибочно. Размер структуры имеет мало (если есть) влияние на время, необходимое для доступа к отдельной переменной внутри этой структуры.

Независимо от этого, однако, основная идея структурирования данных состоит в том, что одна структура содержит (или владеет указателем) некоторые другие структуры прекрасно и разумно.

Что не так хорошо или разумно делает этот указатель по существу непечатанным, поэтому он может ссылаться на любой другой тип. Если вам нужна коллекция одежды, вы, вероятно, начинаете с базового класса clothing, а затем извлекаете из нее различные другие типы (пальто, рубашка, брюки, джинсы и т. Д.). Тогда тип person может содержать (например) вектор указателей на clothing, поэтому он может содержать указатели на все другие типы, полученные из clothing.

Что касается «расширения сферы», ... я не могу сказать многого, кроме того, что я не могу понять, что вы пытаетесь сказать там.