Может быть переопределить оператор "<" для TMyClass? Правда, тоже не получается:
Код: Выделить всё
interface
uses
Classes, SysUtils, gset, gutil;
type
TMyClass = class(TObject)
fld1 : string;
end;
lesslli=specialize TLess<TMyClass>;
TMyList = specialize TSet<TMyClass, lesslli>;
operator < (a, b: TMyClass) c : boolean;
implementation
operator < (a, b: TMyClass) c : boolean;
begin
c:=a.fld1 < b.fld1;
end;
Та же ошибка:
"Error: Operator is not overloaded: "TMyClass" < "TMyClass""
.
Да, ваш вариант рабочий, но не совсем понятно, почему работает без приведения типов, а с приведением не работает:
Код: Выделить всё
interface
uses
Classes, SysUtils, gset, gutil;
type
TMyClass = class(TObject)
fld1 : string;
end;
type generic TCompareMyClass<T>=class
class function c(a,b:T):boolean;inline;
end;
lesslli=specialize TCompareMyClass<TMyClass>;
TMyList = specialize TSet<TMyClass, lesslli>;
implementation
class function TCompareMyClass.c(a,b:T):boolean;inline;
begin
c:=(a as TMyClass).fld1 < (b as TMyClass).fld1;
end;
В этом случае получаем:
domainunit.pas(190,9) Error: Class or COM interface type expected, but got "<undefined type>"
domainunit.pas(190,32) Error: Class or COM interface type expected, but got "<undefined type>"