Hallo Delphi-Community,
ich möchte die „mitgelieferte“ Sortierroutine QuickSort der Klasse TArray in System.Generics.Collections durch eine verbesserte QuickSort-Routine ersetzen.
Hierzu habe ich eine Klasse von TArray wie folgt abgeleitet:
Delphi-Quellcode:
unit Test_TArray_QuickSort;
{$R-,T-,X+,H+,B-} // genauso, wie in unit System.Generics.Collections
interface
uses
System.Generics.Collections
, System.Generics.Defaults
;
type
MyTArray =
class(TArray)
private
class procedure QuickSort<T>(
var Values:
array of T;
const Comparer: IComparer<T>;
L, R: Integer);
end;
implementation
class procedure MyTArray.QuickSort<T>(
var Values:
array of T;
const Comparer: IComparer<T>;
L, R: Integer);
Begin
// hier neue QuickSort-Routine
End;
Für Testzwecke habe ich
in der beiliegenden
Unit anstelle der „neuen Routine“ zunächst Delphi XE5’s Originalversion unverändert übernommen.
Im folgenden Konsolen-Programm wollte ich die neue Klasse austesten:
program Sortieren_0;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils
, System.Generics.Collections
, Test_TArray_QuickSort
in '
Test_TArray_QuickSort.pas';
VAR
S :
String;
Arr : TArray<
String>;
MyArr: MyTArray<
String>;
// hier rebelliert der XE5-Compiler! Warum?????????
Begin
Try
// Code nach: Rolliston, Ch.: Delphi XE2 Foundations: (2012) Seite 288:
Arr:= TArray.Create<
String>('
things', '
SOME', '
some', '
THINGS');
TArray.Sort<
String>(Arr);
For S
in Arr
Do Write(S, '
');
WriteLn;
MyArr:= MyTArray.Create<
String>('
things', '
SOME', '
some', '
THINGS');
MyTArray.Sort<
String>(MyArr);
For S
in MyArr
Do Write(S, '
');
WriteLn;
ReadLn;
Except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
End;
End.
Hierzu verwendete ich einen kleinen 4-Zeiler aus dem Buch: Rolliston, Ch.: Delphi XE2 Foundations: (2012) Seite 288.
Der Test funktioniert einwandfrei mit dem Objekt der Original-Klasse TArray, das Programm lässt sich jedoch bei der absolut identischen Vorgehensweise mit der Instanz der abgeleiteten Klasse MyTArray NICHT einmal compilieren. Anscheinend gilt doch die lateinische Weisheit „Quod licet Iovi, non licet bovi“. Ich bin kurz vor dem Verzweifeln…
Im Anhang sind beide komplette Files dabei:
Program Sortieren_0.dpr und
unit Test_TArray_QuickSort.pas
dabei.
Könnte mir jemand von den Object-Profis freundlicherweise helfen?
Vielen Dank im Voraus!
Gruß
Andreas