Correct way to write generic type aliases

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Correct way to write generic type aliases

leledumbo
Administrator
I want my in-project units depend on a single in-project unit which abstracts the actual used out-project units. i.e. instead of:

MyUnit1 -> RTLUnit
MyUnit2 -> RTLUnit

I want it to be:

MyUnit1 -> RTLAbstractorUnit
MyUnit2 -> RTLAbstractorUnit
RTLAbstractorUnit -> RTLUnit

So I try to write:

unit DataStructures;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Generics.Collections;

type

  // Error: Identifier not found "TObjectList"
  TMyList = TObjectList;

  // Error: Identifier not found "T"
  generic TMyList<T> = specialize TObjectList<T>;
  generic TMyList<T: class> = specialize TObjectList<T>;

  // Unhandled EAccessViolation followed by Error: Compilation raised exception internally
  generic TMyList<T> = class(specialize TObjectList<T>);
  generic TMyList<T: class> = class(specialize TObjectList<T>);
  generic TMyList<T: class> = class(specialize TObjectList<T>) end;

implementation

end.

but neither of above seems to work. What is the correct way to write generic type aliases? Even if it's not real alias like the last 3, as long as it's working, I'm OK.
Reply | Threaded
Open this post in threaded view
|

Re: Correct way to write generic type aliases

Sven Barth-2

Am 28.08.2016 21:15 schrieb "leledumbo" <[hidden email]>:
>
> but neither of above seems to work. What is the correct way to write generic
> type aliases? Even if it's not real alias like the last 3, as long as it's
> working, I'm OK.

Type aliases for generics are not supported.

Regards,
Sven


_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Correct way to write generic type aliases

leledumbo
Administrator
> Type aliases for generics are not supported.

OK, but Delphi seems to support the last 3 variant which creates a generic subclass of a specialized generic type:
http://stackoverflow.com/questions/10060009/is-it-possible-to-create-a-type-alias-to-a-generic-class-in-delphi
At least, it shouldn't make the compiler raise EAccessViolation, right? ;)
Reply | Threaded
Open this post in threaded view
|

Re: Correct way to write generic type aliases

Sven Barth-2

Am 29.08.2016 05:36 schrieb "leledumbo" <[hidden email]>:
>
> > Type aliases for generics are not supported.
>
> OK, but Delphi seems to support the last 3 variant which creates a generic
> subclass of a specialized generic type:
> http://stackoverflow.com/questions/10060009/is-it-possible-to-create-a-type-alias-to-a-generic-class-in-delphi
> At least, it shouldn't make the compiler raise EAccessViolation, right? ;)

Remind me not to jump over code examples... Yes, the last three should work. Would you please report a bug?

Regards,
Sven


_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Correct way to write generic type aliases

leledumbo
Administrator
> Remind me not to jump over code examples... Yes, the last three should work. Would you please report a bug?

Done: http://bugs.freepascal.org/view.php?id=30530