Шаблоны (Templates) = Generic
Модератор: Модераторы
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Просто выбор тип_compareto был не очень удачным. т.к. у Integer нет метода Integer.CompareTo...zub писал(а):Я наверно чето не понимаю, но чем предпологаемая тобой генерация компилятором функции тип_compareto для каждого типа, отличается от генерации сразу min для каждого типа? и как он будет выдирать "тип_compareto" из "мин" в случае если нам надо сделать чтото более сложное чем min\max
Возьмем вместо тип_compareto оператор <
Перепишем функцию min в таком виде:
Код: Выделить всё
template <class TSomeType>
function min(A, B: TSomeType): TSomeType;
begin
if A < B then Result := A
else Result := B;
end;Оператор operator < (A, B: Тип): Boolean; уже есть для Integer, Float string и др. простых типов, единственное, что для этих типов он как бы inline и в данном случае конечно прийдеться его описать в виде функции
Код: Выделить всё
function fpc_integer_gt(var A, B: Integer): Boolean; compilerproc;Для классов же программист либо определяетх соответствующий оператор/функцию и может использовать свой класс в шаблонной функции, либо не определяет и не может использовать в шаблонной функции, а компилятор никаких дополнительных функций не производит!.
Единственное, что компилятор должен производить так это "шаблонный интерфейс", т.е. таблицу виртуальных методов. В приведенном примере generic1.rar генериуются не функции тип_CompareTo, а таблицы виртуальных методов шаблон_типVMT (min_IntegerVMT, min_AnsiStringVMT) - а их размер (в байтах) фиксирован для каждого конкретного шаблона и может быть значительно меньше, чем размер генерируемой функции/класса.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Ну функцию Min() можно и без генериков сделать.
Кстати, вложений форум не держит?
Вот quicksort на инклудах с примерами использования.
Использовать вполне удобно. Может кому пригодится...
А мне генерики единственно могут пригодиться для реализации классов-контейнеров. Вот их на иклудах делать неудобно.
А если начнут как в С++ пихать где надо и где не надо, то это грустно. А ведь начнут. Принцип "есть фича - нада юзать" в действии. Юзабельных библиотек поуменьшится...
Кстати, вложений форум не держит?
Вот quicksort на инклудах с примерами использования.
Использовать вполне удобно. Может кому пригодится...
А мне генерики единственно могут пригодиться для реализации классов-контейнеров. Вот их на иклудах делать неудобно.
А если начнут как в С++ пихать где надо и где не надо, то это грустно. А ведь начнут. Принцип "есть фича - нада юзать" в действии. Юзабельных библиотек поуменьшится...
