Шаг 101.
Открытые параметры-массивы для передачи параметров различных типов

    На этом шаге мы рассмотрим общие принципы использования открытых параметров-массивов для передачи параметров произвольного типа.

   


    В Object Pascal введена новая конструкция array of const, используемая при описании формальных параметров.

    Эта конструкция позволяет передавать в процедуру/функцию произвольное число фактических параметров различных типов с сохранением их исходного типа в рамках процедуры/функции.

    В заголовке процедуры/функции параметры такого типа описывается следующим образом:

    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.

    Со следующего шага мы начнем знакомиться с рекурсивными процедурами и функциями.




Предыдущий шаг Содержание Следующий шаг