На этом шаге мы рассмотрим общие принципы использования открытых параметров-массивов для передачи параметров произвольного типа.
Эта конструкция позволяет передавать в процедуру/функцию произвольное число фактических параметров различных типов с сохранением их исходного типа в рамках процедуры/функции.
В заголовке процедуры/функции параметры такого типа описывается следующим образом:
procedure VectorConst (Vector: array of const);
Параметры, объявленные как array of const, обрабатываются компилятором как значения типа array of TVarRec. Тип TVarRec и связанные с ним константы описаны в модуле System и имеют следующий вид:
const vtInteger = 0; vtBoolean = 1; vtChar = 2; vtExtended = 3; vtString = 4; vtPointer = 5; vtPChar = 6; vtObject = 7; vtClass = 8; vtWideChar = 9; vtFWideChar = 10; vtAnsiString = 11; vtCurrency = 12; vtVariant = 13; type FVarRec = ^VarRec; TVarRec = record VType: Byte; case Byte of vtInteger : (VInteger: Integer); vtBoolean : (VBoolean: Boolean); vtChar : (VChar: Char); vtExtended : (VExtended: PExtended); vtString : (VString: PShortString); vtPointer : (VPointer: Pointer); vtPChar : (VPChar: PChar); vtObject : (VObject: TObject); vtClass : (VClass: TClass); vtWideChar : (VWideChar: WideChar) ; vtPWideChar : (VPWideChar: PWideChar) ; vtAnsiString: (VAnsiString: Pointer); vtCurrency : (VCurrency: PCurrency); vtVariant : (Wariant: PVariant) ; end;
В рамках процедуры/функции с помощью поля VType этого типа, которое принимает значения указанных констант, можно определить действительные типы каждого параметра, переданного в составе открытого массива array of const.
Со следующего шага мы начнем знакомиться с рекурсивными процедурами и функциями.