c ++ создает непрерывный массив типа, который не известен во время компиляции - PullRequest
0 голосов
/ 06 января 2010

скажем, у меня есть несколько разных определений структуры (на самом деле у меня есть около 50 таких определений):

struct Type1{
    int i;
    float f;
};

struct Type2{
    bool b1;
    bool b2;
    double d;
};

они все POD, но могут содержать совершенно разные данные.

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

Какя сделал бы это?

также - скажем, у меня есть целое число (оно содержит некоторые флаги), которое определяет, какой тип этих структур мне нужен.Есть ли способ, как я мог бы упорядочить определения типов этих структур в хэш-карту или около того, чтобы я мог сделать только что-то вроде:

vector<myTypeHashMap[flagsInt]> myVect;

?

Я знаю, что это идет довольно мета-программирование(из которых я понятия не имею :)), но, может быть, есть способ сделать это?

спасибо

спасибо

Ответы [ 12 ]

0 голосов
/ 06 января 2010

Вы можете сделать что-то вроде этого:



void * buffer;
if (a) {
  buffer = new Type1[30];
} else {
  buffer = new Type2[30];
}


0 голосов
/ 06 января 2010

вы могли бы использовать структуру union и std :: vector (примечание: это метод c старой школы и он не предназначен для 50 объектов: D). Объединяющая структура может выглядеть так:

struct unifier
{
     int type;
     union
     {
         struct A;
         struct B;
     };
};

Если их несоответствие по размеру не слишком велико, этот метод позволяет смешивать и сопоставлять типы, или если вы используете только один тип, этот механизм позволит вам повторно использовать память для разных объектов.

...