Материалы книги получены с http://www.itlibitum.ru/
Параметризованные типы
Параметризованный тип внешне представляет собой обычное объявление класса, которому предшествует магическое заклинание template <c1ass Type>, где Type - выбранное вами символическое имя (остальные элементы задаются жестко). Всюду, где символическое имя Type (или другое имя) встречается в объявлении класса оно интерпретируется как макрос, вместо которого при использовании класса подставляется конкретный тип. Класс ListNode, переписанный как параметризованный тип, выглядит следующим образом:
template <class Type>
class ListNode {
private:
ListNode<Type>* next;
Type* data;
public:
ListNode(Type* d, ListNode<Type>* n = NULL) : next(n), data(d) {}
~ListNode() { delete next; }
Type* Data() { return data; }
ListNode<Type>* Next() { return next; }
};
ListNode<Foo> list = new ListNode<Foo> (new Foo);
Foo* f = list->Data(); // Возвращает правильный тип
В теле объявления класса формальный параметр шаблона резервирует место, на которое при использовании класса подставляется фактический параметр. При этом компилятор буквально генерирует правильный, безопасный по отношению к типам код.
Назад Содержание Далее
|