delphi - Invoke method on generic type? -
why following generate error in delphi (xe)?
unit utest; interface type ttest = class public procedure foo<t>(a: t); end; implementation { ttest } procedure ttest.foo<t>(a: t); begin a.add('hej'); end; end.
i thought generic types in delphi inserted generic function, error out if used type don't have add(string) method.
your code produces compilation error because compiler has no way of knowing t
has method named add
receives single string parameter.
i thought generic types in delphi inserted generic function, error out if used type don't have add(string) method.
if using smalltalk or c++ templates, assumption accurate. however, generics not same templates. generics need apply constraint type parameter. constraint needs tell compiler properties t
must have.
for example, constrain t
derived class has suitable add
method. or constrain t
implement interface suitable add
method.
documentation link delphi generic constraints: http://docwiki.embarcadero.com/radstudio/en/constraints_in_generics
the generic constraints can applied rather limited, of shame. example, i'd love able constrain type have mathematical operators. example, i'd able constrain type have +
, -
operators, say. however, there pros , cons both generics , templates, , accept these limitations result of justifiable design decision delphi language designers.
Comments
Post a Comment