<div dir="ltr"><div>Hi,</div><div><br></div><div>I am trying to write some generic routines for working with containers. For example, GetLength function:</div><div><br></div><div><br></div><div><br></div><div>unit u;<br><br>{$MODE FPC}<br>{$MODESWITCH DEFAULTPARAMETERS}<br>{$MODESWITCH OUT}<br>{$MODESWITCH RESULT}<br><br>interface<br><br>generic function GetLength<TContainter>(const V: TContainter): SizeUInt;<br><br>implementation<br><br>generic function GetLength<TContainter>(const V: TContainter): SizeUInt;<br>begin<br>  Exit(V.Count);<br>end;<br><br>end.<br><div><br></div><div><br></div><div>// the program</div><div>{$MODE FPC}<br>{$MODESWITCH DEFAULTPARAMETERS}<br>{$MODESWITCH OUT}<br>{$MODESWITCH RESULT}<br>{$MODESWITCH TYPEHELPERS}<br><br>uses<br>  u;<br><br>type<br>  TDynArray = array of PtrInt;<br><br>TDynArrayHelper = type helper for TDynArray<br>  function Count: SizeUInt;<br>end;<br><br>function TDynArrayHelper.Count: SizeUInt;<br>begin<br>  Exit(System.Length(Self));<br>end;<br><br>var<br>  V: TDynArray;<br><br>begin<br>  v := [0,  1,  2,  3,  5,  6,  7, 10, 11, 12,  13,  15,  16];<br>  Writeln(specialize GetLength<TDynArray>(v));<br>end.<br></div><div><br></div><div><br></div><div><br></div><div>It gives the following compilation error:</div><div>u.pas(16,10) Error: Illegal qualifier<br></div><div><br></div><div>Is the problem because the helper is not known while compiling the unit?</div><div><br></div><div>How do I write a generic routine GetLength which will work both for dynamic</div><div>arrays and for records, objects, classes with Count property?</div><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Victor Matuzenko (Виктор Матузенко)<br></div></div></div></div></div>