Новость из категории: Информация

Свободный паскаль: шаблоны классов в Object Pascal

Содержание:
1. Свободный паскаль: Free Pascal и GNU Pascal;
2. Свободный паскаль: компилятор;
3. Свободный паскаль: IDE fp;
4. Свободный паскаль: стандартная библиотека и утилиты;
5. Свободный паскаль: шаблоны классов в Object Pascal; (Вы читаете данный раздел)
6. Свободный паскаль: GNU Pascal.
Свободный паскаль: шаблоны классов в Object Pascal

Как я уже упоминал, одним из серьезных недостатков Pascal долгое время являлось отсутствие средств обобщенного программирования - шаблонов. Любой алгоритм на паскале был жестко «привязан» к определенному типу данных, и создать обобщенные алгоритмы и структуры данных наподобие библиотеки STL в C++ было невозможно. Проблему можно было в некоторых случаях обойти, используя полиморфные указатели на классы, связанные наследованием, но это не решало ее в принципе. Сейчас в Free Pascal существуют шаблонные классы (шаблонных функций пока нет). Шаблоны реализованы как своеобразные макросы, которые просто подставляют нужный тип данных в обобщенный код на этапе компиляции. Насколько мне известно, такая реализация не позволяет писать «шаблонные метапрограммы», по сути, расширяющие возможности самого компилятора, как это можно сделать на С++ (http://en.wikipedia.org/wiki/ Template metaprogramming). Шаблоны в Pascal выполняют только свою первичную функцию - позволяют не писать один и тот же код для разных типов данных.

Вот простейший пример, иллюстрирующий использование шаблонов:
program Hello _ template; 
type
// Объявляем обобщенный (generic) класс
generic Tadder< _ T>=Class(TObject)
// Вместо _ T будет подставлен нужный тип данных
// после специализации шаблона
procedure add(item1, item2: _T);
end;
// Необходимо явно специализировать шаблоны для всех
// типов данных, которые мы хотим использовать
Tint _ adder = specialize Tadder<integer>;
Tstr _ adder = specialize TAdder<string>;
// Тело метода шаблонного класса. В отличие от С++
// повторять объявление «generic» не нужно.
procedure TAdder.add(item1, item2: _T);
begin
writeln('Sum of elements: ',item1+item2);
end;
var adder1: Tint _ adder;
adder2: Tstr _ adder;
begin
adder1.add(1,2);
adder2.add('Hello', ' world!');
end.

Как видно из этого примера, шаблон должен быть специализирован для конкретного типа данных до его использования путем создания нового типа. Не очень удобно по сравнению с С++, но все же намного лучше, чем ничего. Чтобы скомпилировать приведенную программу, нужно явно указать компилятору, что используется диалект «Object Pascal»:
fpc -Mobjfpc filename.pas




Хотите купить хороший ноутбук и приступить к изучению языка программирования Pascal? Тогда Вам определенно точно следует заглянуть в интернет-магазин "Сокол" (вот ссылка - http://www.sokol.ua/netbooks/lenovo/c18246/v1184/), где Вы сможете приобрести отличный ноутбук марки Lenovo на самых выгодных для себя условиях!

Рейтинг статьи

Оценка
5/5
голосов: 2
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх