Страница 1 из 1

Шаманю с генериками и функциями

СообщениеДобавлено: 31.12.2014 13:35:59
dedm0zaj
ради любопытства написал такое
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

type
  generic func<TName> = function(a, b : TName) : TName;
 
  myfunc = specialize func<integer>;

var
  mymy : myfunc;

begin
  writeln(mymy(10,15));
end.


компилится и запускается. но непонятно, как написать тело функции. например я хочу, чтобы a и b складывались.
в гугле ничего не нашёл.

зы думал, что такое не скомпилится, но на удивление работает.
Free Pascal Compiler version 2.6.4 [2014/04/20] for i386
linux

Re: Шаманю с генериками и функциями

СообщениеДобавлено: 02.01.2015 16:11:43
Devel0
Такое пока ещё не реализовано. Можно обернуть функцию в класс:
Код: Выделить всё
generic TWrapper<T>=class
public
  class function func(a, b: T): T;
end;


Или же можно присвоить процедурной переменной конкретную специализацию: http://rosettacode.org/wiki/Generic_swap#Pascal

Re: Шаманю с генериками и функциями

СообщениеДобавлено: 02.01.2015 17:55:29
dedm0zaj
Devel0 писал(а):Такое пока ещё не реализовано.

почему оно тогда позволяет компилить?

Devel0 писал(а):Или же можно присвоить процедурной переменной конкретную специализацию

так делал, но что толку? в итоге надо написать для каждого типа свою функцию. вообще бессмыслица.

видимо пока единственный вариант - оборачивать в класс.

Re: Шаманю с генериками и функциями

СообщениеДобавлено: 02.01.2015 18:30:37
Devel0
dedm0zaj писал(а):почему оно тогда позволяет компилить?

Чтобы можно было реализовать вариант номер 2 :mrgreen:
А вообще - вопрос к разработчикам компилятора, я не в курсе, какие планы по generics

Re: Шаманю с генериками и функциями

СообщениеДобавлено: 12.01.2015 17:25:15
Дож
Поддержка generic function была анонсирована ещё в 2013 году:
http://lists.freepascal.org/pipermail/f ... 32507.html

Подробности анонса весьма вкусные:
http://lists.freepascal.org/pipermail/f ... 32511.html

Но, насколько я понимаю, эта фича до сих пор не в транке :(