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

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

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

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

Сообщение Lucifer » 02.09.2022 12:07:39

Коллеги! При переносе с дельфей на лазаря попалась вот такая конструкция:
Код: Выделить всё
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 последнего релиза. Не транковая сборка.
Lucifer
постоялец
 
Сообщения: 122
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

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

Сообщение Alex2013 » 02.09.2022 12:27:35

Возможно нужно объявить так generic TRiAnySimpleArray<MyType> = record (или class) ?
Или включить опцию {$modeswitch advancedrecords}.
(Честно говоря я этими "нововведениями в паскаль" не пользуюсь так что "это неточно" )
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение Дож » 02.09.2022 14:41:00

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

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
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение Lucifer » 02.09.2022 16:25:39

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


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

Рейтинг@Mail.ru