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

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

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

Сообщение dedm0zaj » 31.12.2014 13:35:59

ради любопытства написал такое
Код: Выделить всё
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
dedm0zaj
постоялец
 
Сообщения: 108
Зарегистрирован: 05.10.2012 19:55:20

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

Сообщение Devel0 » 02.01.2015 16:11:43

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


Или же можно присвоить процедурной переменной конкретную специализацию: http://rosettacode.org/wiki/Generic_swap#Pascal
Devel0
новенький
 
Сообщения: 66
Зарегистрирован: 24.07.2011 10:43:13

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

Сообщение dedm0zaj » 02.01.2015 17:55:29

Devel0 писал(а):Такое пока ещё не реализовано.

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

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

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

видимо пока единственный вариант - оборачивать в класс.
dedm0zaj
постоялец
 
Сообщения: 108
Зарегистрирован: 05.10.2012 19:55:20

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

Сообщение Devel0 » 02.01.2015 18:30:37

dedm0zaj писал(а):почему оно тогда позволяет компилить?

Чтобы можно было реализовать вариант номер 2 :mrgreen:
А вообще - вопрос к разработчикам компилятора, я не в курсе, какие планы по generics
Devel0
новенький
 
Сообщения: 66
Зарегистрирован: 24.07.2011 10:43:13

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

Но, насколько я понимаю, эта фича до сих пор не в транке :(
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru