Marco van de Voort schrieb:
No, since any specialization creates the actual types, and they all will
have their respective static fields anyway? (since the static field can be
of the variable type)
There are some languages/runtimes that have some damage control here (most
notably C# which uses constraints to limit the definition to classes
implementing a certain interface, and it is said to typically share
specializations for such classes)
Played around with Delphi today, and it seems that class vars are
somewhat broken on generic types. They work as expected (share common
class value amongst all sameclass<sametype> instances) only in a unit
scope, it seems. Which is a pitty.
However, Delphi won't allow you to do something like
TMyGenericBaseClass<T> = class
public
public function AddOp(a: T; b: T) : T;
end;
implementation
function TMyGenericBaseClass<T>.AddOp;
begin
result := a + b;
end;
since the '+' operator is not defined on T. Delphi lets you constrain
your type parameters. That said, I don't really understand why
constraints like :integer, :TObject are not allowed. (:record, :TMyClass
are perfectly fine.) So Delphi's generics are more on the C#/.NET side
than on the C++ template side.
Packages are a means to transparently break your application in
to modules.
True, the specialization is what generates the code AND THAT IS NOT IN THE
UNITS IN THE PACKAGE! So the logic still holds.
Uh, no need to shout. I understand what you are saying, however, I'd
still prefer to have working class variables, rtti checks etc. even with
generic classes and packages.
BTW: It would be intersting to know whether Delphi allows
some sort of "type TMyNewList<T> = type TMyList<T>" definition which
would create a new type with a different set of class variables.
You can try, but I doubt it. The = type <x> functionality is mostly
sleeping, in both FPC and Delphi.
Tried it: not allowed.
The only exception I know is C#'s constraints, but that is possibly nothing
but a bit of damage control in a totally different environment. Still it
might be possible for FPC too, but that is a totally different subject.
Well, IIRC Eiffel, Java/Pizza, .NET, Delphi all support constraints on
type parameters. .NET actually has quite good support for generics (Java
is limited in that respect).
When I read up about the C# stuff I didn't know that much about generics
yet, so if interested, I encourage you to do your own research. But don't
get your hopes up too much.
Ok for the start I'll be looking at co/contravariance, and lambda
functions ;-). Joke aside, I'll think about the .dcp idea and how this
might work out with packages.
Cheers,
Willi
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel