На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Непонятный код, в дебрях делфи :D
Что это за код? Кто ведает подскажите! :wall:
ExpandedWrap disabled
    type
      TIntFunc = reference to function: integer;
     
      IIntFunc = interface(TIntFunc)
      end;
     
      TIntFuncImpl = class(TInterfacedObject, IIntFunc)
      private
        FValue: integer;
      public
        constructor Create(AValue: integer);
        function Invoke: integer;
      end;
     
    { TIntFuncImpl }
     
    constructor TIntFuncImpl.Create(AValue: integer);
    begin
      FValue:= AValue;
    end;
     
    function TIntFuncImpl.Invoke: integer;
    begin
      Result:= FValue;
    end;
     
    begin
     
    end.

Причем метод Invoke требует компилятор, говоря что он объявлен в IIntFunc, но как видите его там нет :wacko: поэтому я его определил в TIntFuncImpl.
Сообщение отредактировано: Cfon -
Rabbit don't come easy: https://github.com/Cfon/ :D
Он объявлен в предке IIntFunc, в TIntFunc;

TIntFunc = reference to function: integer; - эквивалентно

TIntFunc = interface
function Invoke: Integer;
end;
Не каждая серая масса имеет что-то общее с мозгом (с) Станислав Ежи Лец
Цитата jack128 @
Он объявлен в предке IIntFunc, в TIntFunc;

TIntFunc = reference to function: integer; - эквивалентно

TIntFunc = interface
function Invoke: Integer;
end;

О как :blink:
Те. ссылка на функцию это есть интерфейс? И почему тогда вот это не компилируется?
ExpandedWrap disabled
    TIntFunc = interface
      function Invoke: Integer;
    end;
     
    var
      func: TIntFunc;
    begin
      func:= function: integer
      begin
        Result:= 100;
      end;
    end.

Ведь так юзают определение анонимной функции.
И почему то у меня не компилируется:
ExpandedWrap disabled
    var
      func: IIntFunc;
      
    begin
      func:= TIntFuncImpl.Create(100);
      Writeln(func.Invoke.ToString); //<-- [dcc32 Error]: E2003 Undeclared identifier: 'Invoke'
    end.
Сообщение отредактировано: Cfon -
Rabbit don't come easy: https://github.com/Cfon/ :D
В итоге код скомпилился :D

Думаю что так и есть определение ссылки на функцию это есть функциональный интерфейс, т.е. интерфейс и один методом. Этот интерфейс определяет тип анонимки.
Rabbit don't come easy: https://github.com/Cfon/ :D
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,0963 ]   [ 20 queries used ]   [ Generated: 19.05.19, 10:36 GMT ]