Инструменты пользователя

Инструменты сайта


cp:primer:pointer_proc

Использование процедурных типов

Суть этой возможности в Компонентном Паскале состоит в том, что можно создать переменную, которой позже можно присвоить адрес какой-либо процедуры, после чего, можно использовать эту переменную как саму процедуру.

При этом, нужно помнить, что список аргументов у переменной процедурного типа и самой процедуры должны совпадать.

Пример

MODULE TestProcedure;
    IMPORT sl := StdLog;
    TYPE
        tP = PROCEDURE (IN str: ARRAY OF CHAR);
 
    PROCEDURE Test1 (IN str: ARRAY OF CHAR);
    BEGIN
        sl.String('Test1:=' + str); sl.Ln
    END Test1;
 
    PROCEDURE Test2 (IN str: ARRAY OF CHAR);
    BEGIN
        sl.String('Test2:=' + str); sl.Ln
    END Test2;
 
    PROCEDURE Start*;
    VAR
        pp: tP;
        str: ARRAY 40 OF CHAR;
    BEGIN
        pp := Test1;
        str := 'Привет, Вася!';
        pp(str);
        pp := Test2;
        str := 'Привет, Петя!';
        pp(str)
    END Start;
END TestProcedure.
TestProcedure.Start

Важные замечания

Если переменной процедурного типа не присвоить значение, она будет иметь значение NIL.

cp/primer/pointer_proc.txt · Последние изменения: 2016/04/03 18:22 — prospero78