How to use generics

From Free Pascal wiki
Jump to: navigation, search

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.

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.