<p>Am 26.05.2016 10:38 schrieb "LacaK" <<a href="mailto:lacak@zoznam.sk">lacak@zoznam.sk</a>>:<br>
><br>
><br>
>>> is there way how to declare function, which will accept as parameter any<br>
>>> array type ?<br>
>>> (this parameter I need forward to System.Length() only )<br>
>><br>
>> Generally one uses TArray<T> as parametertype. in such cases. One can take<br>
>> the length of a generic array.<br>
><br>
> Hm,<br>
> I do not understand.<br>
><br>
> I need something like:<br>
><br>
> function GetLength(const A): integer; inline;<br>
> begin<br>
>   Result := System.Length(A); // of course here I get "Type mismatch"<br>
> end;<br>
><br>
> Regular function, which I will call from generic object method as far as inside generic object method I can not use System.Length()</p>
<p>Your problem is that you have a Length property in your class, so that's why you need to use System.Length(). Try something like this:</p>
<p>=== code begin ===</p>
<p>type<br>
  generic TMyHelper<T> = class<br>
    class function GetLength(aArray: specialize TArray<T>): LongInt;<br>
  end;</p>
<p>// in your object you do this:</p>
<p>type<br>
  THelper = specialize TMyHelper<T>;</p>
<p>// and in your GetLength method you use THelper.GetLength(YourArray);</p>
<p>=== code end ===</p>
<p>Not tested, it might not compile as is (maybe you need to tweak around a bit).<br>
In general I can't recommend anything before 3.0.0 for serious use of generics.</p>
<p>Regards,<br>
Sven</p>