У меня есть много константных массивов, которые не имеют одинаковое количество элементов.
Чтобы хранить эти массивы, я объявил тип массива, достаточно большой, чтобы хранить (или ссылаться?) Каждый элемент самого большого из этих массивов:
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);
);
Но я полагаю, поскольку массивы объявлены как динамические массивы, он не хочет выделять для них память до времени выполнения?