<div dir="ltr"><div><div class="gmail_extra"><div class="gmail_quote">On Tue, Nov 11, 2014 at 5:34 PM, silvioprog <span dir="ltr"><<a href="mailto:silvioprog@gmail.com" target="_blank">silvioprog@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><span class=""><div class="gmail_quote">On Sat, Nov 1, 2014 at 1:54 AM, leledumbo <span dir="ltr"><<a href="mailto:leledumbo_cool@yahoo.co.id" target="_blank">leledumbo_cool@yahoo.co.id</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">> Hm... so I'll choose the mode delphi in my new projects to type less code<br>
hehe...<br>
<br>
You actually ended up typing much less using objfpc style generics. Think of<br>
how many angle brackets you would need to type in Delphi mode? And how many<br>
if the specialized type changes? ;)<br>
Delphi generics can actually do the same (create a new type first), but<br>
objfpc enforces this.</blockquote></div><div class="gmail_extra"><br></div></span><div class="gmail_extra">Yes, but I had some problems to understand the generic sintax in objfpc (it is not documented). =(</div><div class="gmail_extra"><br></div><div class="gmail_extra">For example, how to compile this code using objfpc?:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">unit Core.Singleton;</div><div class="gmail_extra"><br></div><div class="gmail_extra">{$mode delphi}</div><div class="gmail_extra"><br></div><div class="gmail_extra">interface</div><div class="gmail_extra"><br></div><div class="gmail_extra">type</div><div class="gmail_extra"><br></div><div class="gmail_extra">  { TSingleton }</div><div class="gmail_extra"><br></div><div class="gmail_extra">  TSingleton<T: class, constructor> = class(TObject)</div><div class="gmail_extra">  public</div><div class="gmail_extra">    class function GetInstance: T;</div><div class="gmail_extra">  end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">implementation</div><div class="gmail_extra"><br></div><div class="gmail_extra">{ TSingleton }</div><div class="gmail_extra"><br></div><div class="gmail_extra">class function TSingleton<T>.GetInstance: T;</div><div class="gmail_extra">begin</div><div class="gmail_extra">  { TODO: implement! }</div><div class="gmail_extra">end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">end.</div><div><br></div><div>If I try to use mode objfpc:</div><div><br></div><div><div>unit Core.Singleton;</div><div><br></div><div>{$mode objfpc}{$H+}</div><div><br></div><div>interface</div><div><br></div><div>type</div><div><br></div><div>  { TSingleton }</div><div><br></div><div>  generic TSingleton<T: class, constructor> = class(TObject)</div><div>  public</div><div>    class function GetInstance: T;</div><div>  end;</div><div><br></div><div>implementation</div><div><br></div><div>{ TSingleton }</div><div><br></div><div>class function TSingleton<T>.GetInstance: T;</div><div>begin</div><div>  { TODO: implement! }<br></div><div>end;</div><div><br></div><div>end.</div></div><div><br></div><div>The error is:</div><div><br></div><div><div>Compile Project, Target: project1.exe: Exit code 1, Errors: 1</div><div>Core.Singleton.pas(11,32) Error: Illegal expression.</div></div><div><br></div><div>=(</div></div></div></div></blockquote></div><div><br></div><div>Oh, sorry. Just:</div><div><br></div><div><div>unit Core.Singleton;</div><div><br></div><div>{$mode objfpc}{$H+}</div><div><br></div><div>interface</div><div><br></div><div>type</div><div><br></div><div>  { TSingleton }</div><div><br></div><div>  generic TSingleton<T: class> = class(TObject)</div><div>  public</div><div>    class function GetInstance: T;</div><div>  end;</div><div><br></div><div>implementation</div><div><br></div><div>{ TSingleton }</div><div><br></div><div>class function TSingleton.GetInstance: T;</div><div>begin</div><div>end;</div><div><br></div><div>end.</div></div><div><br></div><div>And compiled like a charm. =)</div><div><br></div>-- <br><div class="gmail_signature">Silvio Clécio<br>My public projects - <a href="http://github.com/silvioprog" target="_blank">github.com/silvioprog</a></div>
</div></div></div>