Используя D2010, я хотел бы сделать что-то вроде этого:
procedure SizeArray(var aArr: array of integer; aSize: integer);
begin
SetLength(aArr,aSize);
end;
Но это не скомпилировать. Поскольку мой параметр "aArr" не является динамическим массивом, это параметр открытого массива. И SetLength не может быть вызван на нем. Единственный известный мне способ заставить параметр быть динамическим массивом, это дать ему имя типа, например:
type
TIntArray = array of integer;
procedure SizeArray(var aArr: TIntArray; aSize: integer);
begin
SetLength(aArr,aSize);
end;
А теперь код компилируется. И это работает нормально, по большей части, но это не удается:
procedure Test;
var
a : array of integer;
begin
SizeArray(a,5);
end;
Поскольку типы фактических и формальных параметров var должны быть идентичны, а компилятор не распознает «массив целых чисел» и «TIntArray» как идентичные типы.
Итак, вот мой вопрос: есть ли способ заставить компилятор идентифицировать мой параметр var как динамический массив, а не как открытый массив, чтобы вызывающая сторона могла объявлять простой «целочисленный массив», а не какой-то именованный тип
Заранее спасибо.