Delphi: Объявление типа постоянной записи, содержащей постоянные массивы - PullRequest
3 голосов
/ 18 ноября 2011

У меня есть много константных массивов, которые не имеют одинаковое количество элементов.

Чтобы хранить эти массивы, я объявил тип массива, достаточно большой, чтобы хранить (или ссылаться?) Каждый элемент самого большого из этих массивов:

type
  TElements = array [1 .. 1024] of Single;

Каждый из этих массивов TElements логически связан с одним другим массивом TElements, который имеет с таким же количеством элементов.

Итак, чтобы объединить эти массивы одинакового размера, я объявил тип записи следующим образом:

type
  TPair = record
    n : Integer; // number of elements in both TElements arrays
    x : ^TElements;
    y : ^TElements;
  end;

Затем я определяю постоянные записи TPair, содержащие константы пар массивов TElements:

const

  ElementsA1 : array [1 .. 3] of Single = (0.0, 1.0,  2.0);
  ElementsA2 : array [1 .. 3] of Single = (0.0, 10.0, 100.0);
  ElementsA  : TPair =
  (
    n : 3;
    x : @ElementsA1;
    y : @ElementsA2;
  );

  ElementsB1 : array [1 .. 4] of Single = (0.0, 1.0,  2.0,   3.0);
  ElementsB2 : array [1 .. 4] of Single = (0.0, 10.0, 100.0, 1000.0);
  ElementsB  : TPair =
  (
    n : 4;
    x : @ElementsB1;
    y : @ElementsB2;
  );  

Это похоже на неэффективный способ ссылки на данные массива (возможно, нет, я не знаю).

Я хотел бы сохранить один постоянный тип данных («парный» тип данных), который содержит два постоянных массива.

В каждой «паре» оба массива гарантированно содержат одинаковое количество элементов.

Однако нельзя гарантировать, что количество элементов массива в одной «паре» будет равно количеству элементов массива в любой другой «паре».

Есть ли способ объявить константный тип данных "пара", чтобы размеры содержащегося в нем массива определялись определением константного массива?

В идеале я хотел бы избавиться от типа TElements и неуклюжих указателей. Что-то вроде этого было бы круто, если бы оно компилировалось:

type
  TPair = record
    x : array of Single; 
    y : array of Single; 
  end;

const

  ElementsA : TPair =
  (
    x : (0.0, 1.0,  2.0);
    y : (0.0, 10.0, 100.0);
  );

  ElementsB : TPair =
  (
    x : (0.0, 1.0,  2.0,   3.0);
    y : (0.0, 10.0, 100.0, 1000.0);
  );

Но я полагаю, поскольку массивы объявлены как динамические массивы, он не хочет выделять для них память до времени выполнения?

1 Ответ

4 голосов
/ 18 ноября 2011

Есть ли способ объявить константный "парный" тип данных так, чтобы размеры содержащегося в нем массива определялись определением константного массива?

Нет, к сожалению, это невозможно. Вы должны объявить размер вашего массива в квадратных скобках.

...