|
Параметризованные типы Параметризованный тип внешне представляет собой обычное объявление класса, которому предшествует магическое заклинание 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(); // Возвращает правильный тип В теле объявления класса формальный параметр шаблона резервирует место, на которое при использовании класса подставляется фактический параметр. При этом компилятор буквально генерирует правильный, безопасный по отношению к типам код. |
Copyright 2005. Климов Александр. All Right Reserved.