К сожалению, FreePascal в настоящее время имеет только общие классы, а не универсальные функции. Тем не менее, ваша цель все еще может быть достигнута, хотя и немного неловко. Вам нужно определить новый класс для инкапсуляции вашей операции:
unit Thrice;
interface
type
generic ThriceCalculator<A> = class
public
class function Calculate(x: A): array of A;
// We define it as a class function to avoid having to create an object when
// using Calculate. Similar to C++'s static member functions.
end;
implementation
function ThriceCalculator.Calculate(x: A): array of A;
begin
SetLength(Result, 3);
Result[0]:= x;
Result[1]:= x;
Result[2]:= x;
end;
end.
Теперь, к сожалению, когда вы хотите использовать этот класс с любым конкретным типом, вам нужно специализировать это:
type
IntegerThrice = specialize ThriceCalculator<Integer>;
Только тогда вы можете использовать его как:
myArray:= IntegerThrice.Calculate(10);
Как вы видите, Pascal - это еще не путь для общего программирования.