Am 15.08.2018 um 11:17 schrieb Michael Van Canneyt:
On Wed, 15 Aug 2018, Dennis wrote:
Michael Van Canneyt wrote:
On Wed, 15 Aug 2018, Dennis wrote:
I was trying to use a generic class TDictionary<T> with type T.
This class has a method that compares a variable of T with another
one.
When I specialize a class using this TDictionary with a type:
TSecurity = object
....
end;
e.g. TNewDict = class(TDictionary<String, TSecurity>);
it raise a compiler complaining that my TSecurity type has no
operator = defined.
But when I try to add like this:
TSecurity = object
....
class operator = (constref aLeft, aRight: TSecurity ): Boolean;
//<---compiler Error: Procedure or Function expected
end;
Did you try creating an "old-fashioned" = operator ?
Something like
Operator = (l,r : TSecurity) z : boolean;
begin
// compare here
end;
Just tried.
It complained: Fatal: Syntax error, "IMPLEMENTATION" expected but
"identifier OPERATOR" found
Following works here:
Prograp testo;
Type
TSecurity = Object
a,b : Integer;
end;
Operator = (l,r : TSecurity) z : boolean;
begin
Z:=(l.a=r.a) and (L.b=r.b);
end;
begin
end.
But maybe you are using mode delphi ? If so, try separating out the
object
definition in a separate unit which is not compiled in delphi mode.
A global operator won't help at all as (currently) the operator won't be
visible during the specialization. Only if the operator is visible
during the *generic's* declaration it would be picked up.
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal