Difference between revisions of "How to use generics"

From Lazarus wiki
Jump to navigationJump to search
Line 1: Line 1:
 
An example of how to use generics to write a function gmax() that takes the maximum of two not-yet-typed variables.
 
An example of how to use generics to write a function gmax() that takes the maximum of two not-yet-typed variables.
Note that the functions are namespaced by the classname. A disadvantage may be that generics can't be overloaded.
+
Note that while the functions here are namespaced by the classname, FPC versions from 3.1.1 onwards also support fully free-standing generic methods. <syntaxhighlight>
 
 
<syntaxhighlight>
 
 
program UseGenerics;
 
program UseGenerics;
  

Revision as of 04:45, 9 April 2019

An example of how to use generics to write a function gmax() that takes the maximum of two not-yet-typed variables.

Note that while the functions here are namespaced by the classname, FPC versions from 3.1.1 onwards also support fully free-standing generic methods.

program UseGenerics;

{$mode objfpc}{$H+}

type
  generic TFakeClass<_GT> = class
    class function gmax(a,b: _GT):_GT;
  end;

  TFakeClassInt = specialize TFakeClass<integer>;
  TFakeClassDouble = specialize TFakeClass<double>;

  class function TFakeClass.gmax(a,b: _GT):_GT;
  begin
    if a > b then 
      result := a
    else 
      result := b;
  end;

begin
    // show max of two integers
  writeln( 'Integer GMax:', TFakeClassInt.gmax( 23, 56 ) );
    // show max of two doubles
  writeln( 'Double GMax:', TFakeClassDouble.gmax( 23.89, 56.5) );
  readln();
end.