Вброс для развития флейма
Цена использования генериков - http://lazarusroad.blogspot.com/2012/06 ... erics.html
Я полностью согласен - кажущаяся проста порождает лишний код.
Модератор: Модераторы
TCrossArray = specialize TPointsList<TPointArray>;
CrossPointsCollection: TCrossArray;
Cr1 := TPointArray(CrossPointsCollection.Items[I])
program Project1;
uses
fgl;
Type
TPointArray = Class
Private
bID: Integer;
Public
Property ID: Integer Read bID Write bID;
End;
Type TCrossArray = specialize TFPGList<TPointArray>;
Var
i: Integer;
aBuffer, Cr1: TPointArray;
CrossPointsCollection: TCrossArray;
begin
CrossPointsCollection := TCrossArray.Create;
aBuffer := TPointArray.Create;
aBuffer.ID := 1;
CrossPointsCollection.Add(aBuffer);
For i := 0 To CrossPointsCollection.Count - 1 Do
Begin
Cr1 := CrossPointsCollection.Items[0];
WriteLn(Cr1.ID);
WriteLn(CrossPointsCollection.Items[0].ID);
End;
CrossPointsCollection.Free;
aBuffer.Free;
end.
TList - это вообще не обобщение
{$mode objfpc}
interface
uses
Classes, SysUtils, fgl;
const
DemosVersion = '0.0.1';
type
// Точка контура
TConturPoint = record
X, Y, Z: Double;
end;
// Тело между сечениями
TBodyBetweenCross = record
CrossBeginZ: Double;
CrossEndZ: Double;
CrossDeltaZ: Double;
end;
// Массив точек контура
TPointArray = specialize TFPGList<TConturPoint>;
// Массив сечений
TCrossArray = specialize TFPGList<TPointArray>;
// Тело между сечениями
TBodyArray = specialize TFPGList<TBodyBetweenCross>;
implementation
end.
Hint: Start of reading config file D:\lazarus\fpc\2.6.0\bin\i386-win32\fpc.cfg
Hint: End of reading config file D:\lazarus\fpc\2.6.0\bin\i386-win32\fpc.cfg
Free Pascal Compiler version 2.6.0 [2012/03/14] for i386
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling Demos.lpr
2 151/1.344 Kb Used
Compiling demosmain.pas
Compiling typesdemos.pas
Error: Operator is not overloaded: "TConturPoint" = "TConturPoint"
program Project1;
{$mode delphi}{$H+}
uses
Classes, SysUtils, fgl;
const
DemosVersion = '0.0.1';
type
// Точка контура
{ TConturPoint }
TConturPoint = record
X, Y, Z: Double;
class operator Equal(A, B: TConturPoint): Boolean;
end;
// Тело между сечениями
{ TBodyBetweenCross }
TBodyBetweenCross = record
CrossBeginZ: Double;
CrossEndZ: Double;
CrossDeltaZ: Double;
class operator Equal(A, B: TBodyBetweenCross): Boolean;
end;
// Массив точек контура
TPointArray = TFPGList<TConturPoint>;
// Массив сечений
TCrossArray = TFPGList<TPointArray>;
{ TBodyBetweenCross }
Class Operator TBodyBetweenCross.Equal(A, B: TBodyBetweenCross): Boolean;
Begin
Result := (A.CrossBeginZ = B.CrossBeginZ) And (A.CrossEndZ = B.CrossEndZ) And
(A.CrossDeltaZ = B.CrossDeltaZ);
End;
{ TConturPoint }
Class Operator TConturPoint.Equal(A, B: TConturPoint): Boolean;
Begin
Result := (A.X = B.X) And (A.Y = B.Y) And (A.Z = B.Z);
End;
// Тело между сечениями
Type TBodyArray = TFPGList<TBodyBetweenCross>;
begin
end.
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2