Чем заменить конструкцию?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Lucifer
постоялец
Сообщения: 133
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Чем заменить конструкцию?

Сообщение Lucifer »

Коллеги! При переносе с дельфей на лазаря попалась вот такая конструкция:

Код: Выделить всё

type
  TRiAnySimpleArray<MyType> = record
  public
    FCount: integer;
    FItems: tarray<mytype>;
    procedure SetCount(newcount: integer); inline;
    function GetItem(Index: integer): MyType; inline;
    procedure SetItem(Index: integer; Value: mytype); inline;
    property rroItem[index: integer]: MyType read getItem write setItem; default;
    property Count: integer read FCount write SetCount;  
Лазарь про это <что-то_там> не в курсе. Или это я не в курсе и уже завезли? Если что, Lazarus 2.2.2 последнего релиза. Не транковая сборка.
Alex2013
долгожитель
Сообщения: 3230
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Возможно нужно объявить так generic TRiAnySimpleArray<MyType> = record (или class) ?
Или включить опцию {$modeswitch advancedrecords}.
(Честно говоря я этими "нововведениями в паскаль" не пользуюсь так что "это неточно" )
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Что означает "не в курсе"? Если не компилирует, то какую ошибку выдаёт?

FPC это компилировать умеет:

Код: Выделить всё

program delphi_generic;

{$MODE DELPHI}
{$MODESWITCH ADVANCEDRECORDS}

type
TArray<MyType> = record
end;

TRiAnySimpleArray<MyType> = record
public
  FCount: integer;
  FItems: tarray<mytype>;
  procedure SetCount(newcount: integer); inline;
  function GetItem(Index: integer): MyType; inline;
  procedure SetItem(Index: integer; Value: mytype); inline;
  property rroItem[index: integer]: MyType read getItem write setItem; default;
  property Count: integer read FCount write SetCount;
end;

procedure TRiAnySimpleArray<MyType>.SetCount(newcount: integer); inline;
begin
end;

function TRiAnySimpleArray<MyType>.GetItem(Index: integer): MyType; inline;
begin
  Exit(Default(MyType));
end;

procedure TRiAnySimpleArray<MyType>.SetItem(Index: integer; Value: mytype); inline;
begin
end;

begin
end.

Код: Выделить всё

D:\data\temp>fpc delphi_generic.pas
Free Pascal Compiler version 3.2.1 [2021/02/01] for i386
Copyright (c) 1993-2020 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling delphi_generic.pas
delphi_generic.pas(7,8) Note: Private type "<record type>.MyType" never used
Linking delphi_generic.exe
35 lines compiled, 0.1 sec, 28192 bytes code, 1316 bytes data
1 note(s) issued
Lucifer
постоялец
Сообщения: 133
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Сообщение Lucifer »

Всем спасибо, это победил. Просто я не в курсе был, что таковые конструкции завезли. :-)
Ну и {$mode delphi} не интересует от слова совсем. Да и прогу просят сделать кроссплатформенно. В общем, вопрос закрыт.
Ответить