[fpc-pascal] Generic specialization using $mode objfpc

silvioprog silvioprog at gmail.com
Tue Nov 11 22:48:49 CET 2014


On Tue, Nov 11, 2014 at 5:34 PM, silvioprog <silvioprog at gmail.com> wrote:

> On Sat, Nov 1, 2014 at 1:54 AM, leledumbo <leledumbo_cool at yahoo.co.id>
> wrote:
>
>> > Hm... so I'll choose the mode delphi in my new projects to type less
>> code
>> hehe...
>>
>> You actually ended up typing much less using objfpc style generics. Think
>> of
>> how many angle brackets you would need to type in Delphi mode? And how
>> many
>> if the specialized type changes? ;)
>> Delphi generics can actually do the same (create a new type first), but
>> objfpc enforces this.
>
>
> Yes, but I had some problems to understand the generic sintax in objfpc
> (it is not documented). =(
>
> For example, how to compile this code using objfpc?:
>
> unit Core.Singleton;
>
> {$mode delphi}
>
> interface
>
> type
>
>   { TSingleton }
>
>   TSingleton<T: class, constructor> = class(TObject)
>   public
>     class function GetInstance: T;
>   end;
>
> implementation
>
> { TSingleton }
>
> class function TSingleton<T>.GetInstance: T;
> begin
>   { TODO: implement! }
> end;
>
> end.
>
> If I try to use mode objfpc:
>
> unit Core.Singleton;
>
> {$mode objfpc}{$H+}
>
> interface
>
> type
>
>   { TSingleton }
>
>   generic TSingleton<T: class, constructor> = class(TObject)
>   public
>     class function GetInstance: T;
>   end;
>
> implementation
>
> { TSingleton }
>
> class function TSingleton<T>.GetInstance: T;
> begin
>   { TODO: implement! }
> end;
>
> end.
>
> The error is:
>
> Compile Project, Target: project1.exe: Exit code 1, Errors: 1
> Core.Singleton.pas(11,32) Error: Illegal expression.
>
> =(
>

Oh, sorry. Just:

unit Core.Singleton;

{$mode objfpc}{$H+}

interface

type

  { TSingleton }

  generic TSingleton<T: class> = class(TObject)
  public
    class function GetInstance: T;
  end;

implementation

{ TSingleton }

class function TSingleton.GetInstance: T;
begin
end;

end.

And compiled like a charm. =)

-- 
Silvio Clécio
My public projects - github.com/silvioprog
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20141111/af46a220/attachment.html>


More information about the fpc-pascal mailing list