Вброс для развития флейма
Цена использования генериков - 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
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1