<div dir="auto"><div><div class="gmail_quote"><div dir="ltr">Am Mi., 28. Nov. 2018, 15:27 hat Ryan Joseph <<a href="mailto:ryan@thealchemistguild.com">ryan@thealchemistguild.com</a>> geschrieben:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
> On Nov 28, 2018, at 7:26 PM, Sven Barth via fpc-pascal <<a href="mailto:fpc-pascal@lists.freepascal.org" target="_blank" rel="noreferrer">fpc-pascal@lists.freepascal.org</a>> wrote:<br>
> <br>
> Because that is not supposed to work. Generic routines are *routines*, not types. You can't define aliases for routines either, not to mention the problems with scoping as generic methods exist as well. <br>
<br>
It seems natural you could specialize a generic procedure because you can do this for all other generic types. Maybe a type isn’t the right way but it feels like there should be some way to specialize the procedure header outside of a begin/end block. I know you can't make aliases to procedures but generics are more of “instantiating a template” which falls outside the scope the language in general.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">You're not wrong, but a type alias is definitely the wrong way. </div><div dir="auto">But that is a completely different topic, one that I'm not willing to discuss right now, aside from "we don't support something like that".</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
> <br>
> Generic routines however have a different boon in Delphi that I plan to add as well: inference of the type parameters based on the parameters the user passed. In that case the type parameter clause as well as the "specialize" in non-Delphi modes would not need to be used and it would look like a normal, non-generic call. <br>
<br>
That’s probably the best way (Swift does this and I always wondered why FPC doesn’t) but it won’t work unless the parameters contain the generic parameter, which is a minority of generics functions anyways.<br>
<br>
Just to be sure, you mean like this?<br>
<br>
generic procedure DoThis<T>(msg:T);<br>
begin<br>
end;<br>
<br>
begin<br>
<br>
        DoThis(‘hello’); // compiles as “specialize DoThis<string>(‘hello’)” because param types match generic parameter types<br>
<br>
If all that’s involved is comparing params types to generic types then that looks like a relatively simple solution.  Const generic params may have complicated this some however.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Yes, all generic parameters need to be part of the routine's parameters and constant parameters indeed won't work in that case. </div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven </div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"></blockquote></div></div></div>