Есть ли в Pascal аналог шаблонов из C++ - Free Pascal
Формулировка задачи:
Есть ли в Pascal аналог Шаблонов из С++? Если да, то как, например, реализовать такую процедуру:
template< typename T >
void sort( T array[], int size )
{
T t;
for (int i = 0; i < size - 1; i++)
for (int j = size - 1; j > i; j--)
if (array[j] < array[j-1])
{
t = array[j];
array[j] = array[j-1];
array[j-1] = t;
}
}Решение задачи: «Есть ли в Pascal аналог шаблонов из C++»
textual
Листинг программы
{$mode objfpc}
type
rec = record
A, B: integer;
end;
generic Swapper<T> =
class
type public
class procedure swap(var A, B: T); inline;
end;
iSwapper = specialize Swapper<integer>;
fSwapper = specialize Swapper<double>;
rSwapper = specialize Swapper<rec>;
class procedure Swapper.swap(var A, B: T);
var C: T;
begin
C := A; A := B; B := C;
end;
var
i1, i2: integer;
f1, f2: double;
r1, r2: rec;
begin
i1 := 4; i2 := 7;
writeln(i1, ' <-> ', i2);
iSwapper.swap(i1, i2);
writeln(i1, ' ', i2);
f1 := 2.4; f2 := 5.7;
writeln(f1:0:2, ' <-> ', f2:0:2);
fSwapper.swap(f1, f2);
writeln(f1:0:2, ' ', f2:0:2);
r1.A := 10; r1.B := 20;
r2.A := 40; r2.B := 76;
rSwapper.swap(r1, r2);
// тоже можешь напечатать содержимое записей, чтобы убедиться, что Swap работает...
end.