R.14.2 Шаблоны типов для классов

R.14.2 Шаблоны типов для классов

Шаблон типа для класса определяет как будут строиться классы, подобно тому, как описание класса определяет как будут строиться объекты этого класса. Шаблон типа для класса vector можно описать следующим образом:

template‹class T› class vector {

 T* v;

 int sz;

public:

 vector(int);

 T& operator[](int);

 T& elem(int i) { return v[i]; }

 //…

};

Префикс template‹class T› показывает, что описывается шаблон типа, и что в этом описании используется имя-типа T, иными словами, vector - это параметризованный тип с параметром T.

Класс можно задать с помощью конструкции имя-шаблонного-класса:

имя-шаблонного-класса:

 имя-шаблона-типа ‹ список-парам-шаблона-типа ›

список-парам-шаблона-типа:

 парам-шаблона-типа

 список-парам-шаблона-типа , парам-шаблона-типа

парам-шаблона:

 выражение

 имя-типа

Конструкция имя-шаблонного-класса является именем-класса (§R.9).

Класс, который порождается шаблоном типа для класса, называется шаблонным классом и эквивалентен обычному классу, определенному со специальным именем - именем-шаблонного-класса, см. §R.14.5.

Если в конструкции имя-шаблонного-класса имя-шаблона-типа не определено,то она обозначает неопределенный класс.

Имя шаблонного класса должно быть уникальным в программе и в своей области видимости оно не может обозначать другой шаблон типа, класс, функцию, объект, значение или тип.

Типы, указанные в списке-парам-шаблона-типа из имени-шаблонного-класса, должны соответствовать типам, заданным в списке-параметров-шаблона-типа из шаблона-типа. (Можно сказать, что первые являются фактическими параметрами шаблона типа, а вторые - формальными.)

Кроме типов в списке-парам-шаблона-типа могут быть: выражения-константы, адреса объектов или функций, подлежащих внешнему связыванию, статические члены классов. Для параметров, не являющихся типами, требуется точное соответствие (§R.13.2).

Приведем примеры использования классов шаблона типа vector:

vector‹int› v1(20);

vector‹complex› v2(30);

typedef vector‹complex› cvec; // cvec становится синонимом

 // vector‹complex›

cvec v3(40); // v2 и v3 одного типа

v1[3] = 7;

v2[3] = v3.elem(4) = complex(7,8);

Здесь vector‹int› и vector‹complex› являются шаблонными классами, и их определения берутся по умолчанию из шаблона типа vector.

Поскольку шаблонное-имя-класса является именем-класса, то оно может использоваться там, где допустимо имя-класса, например:

class vector‹Shape*›;

vector‹Window›* current_window;

class svector: public vector‹Shape*› {/*… */};

Определение функции-члена шаблонного класса дано в §R.14.6.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Шаблоны

Из книги автора

Шаблоны Делать работу, которая до этого уже была выполнена другими, – напрасная трата времени и сил. Ваши усилия, затраченные на оформление списка приглашенных на вечеринку, можно направить на другие неотложные дела, если воспользоваться подсистемой шаблонов. Созданные


Административные шаблоны

Из книги автора

Административные шаблоны С помощью административных шаблонов можно более тонко настроить как ограничения на работу отдельных компонентов компьютера, так и сами эти компоненты. Многие считают, что административные шаблоны и являются групповой политикой, хотя это не


Шаблоны безопасности

Из книги автора

Шаблоны безопасности Шаблоны безопасности являются довольно интересной оснасткой, с помощью которой можно создать свой собственный шаблон безопасности или отредактировать уже существующие. Шаблоны безопасности представляют собой файлы, хранящие различные настройки


Шаблоны

Из книги автора

Шаблоны Программа Excel предлагает множество готовых шаблонов оформления документа. Вы можете выбрать готовый шаблон, а затем просто подставить в ячейки свои данные. С помощью шаблонов быстро подготавливают, например, такие документы, как бланки, ведомости, календари,


Шаблоны функций классов в STL

Из книги автора

Шаблоны функций классов в STL Допустим, у вас есть два вектора объектов Widget, требуется скопировать объекты Widget из одного вектора в конец другого. Задача решается легко — достаточно воспользоваться интервальной функцией insert контейнера vector:vector<Widget>


16. Шаблоны классов

Из книги автора

16. Шаблоны классов В этой главе описывается, как определять и использовать шаблоны классов. Шаблон - это предписание для создания класса, в котором один или несколько типов либо значений параметризованы. Начинающий программист может использовать шаблоны, не понимая


16.7. Шаблоны-члены

Из книги автора

16.7. Шаблоны-члены Шаблон функции или класса может быть членом обычного класса или шаблона класса. Определение шаблона-члена похоже на определение шаблона: ему предшествует ключевое слово template, за которым идет список параметров:template class Tclass Queue {private:// шаблон


16.8. Шаблоны классов и модель компиляции A

Из книги автора

16.8. Шаблоны классов и модель компиляции A Определение шаблона класса - это лишь предписание для построения бесконечного множества типов классов. Сам по себе шаблон не определяет никакого класса. Например, когда компилятор видит:template class Typeclass Queue { ... };он только сохраняет


16.12. Пространства имен и шаблоны классов

Из книги автора

16.12. Пространства имен и шаблоны классов Как и любое определение в глобальной области видимости, определение шаблона класса можно поместить внутрь пространства имен. (Пространства имен рассматривались в разделах 8.5 и 8.6.) Наш шаблон будет скрыт в данном пространстве имен;


Шаблоны

Из книги автора

Шаблоны Языки программирования С и Си++ обеспечивают строгую проверку типов данных. Некоторые языки не обеспечивают такой проверки и она полностью ложится на плечи программиста. Например в языке PL1 вы можете сравнивать значение строковой и числовой переменных. Это не


Шаблоны в MFC

Из книги автора

Шаблоны в MFC В библиотеке классов MFC определен ряд шаблонов для создания таких структур хранения информации как массив, список, словарь. Более подробно об этих шаблонах вы можете прочитать в разделе “Коллекции” главы “Некоторые классы


Встроенные шаблоны

Из книги автора

Встроенные шаблоны Для того чтобы обеспечить рекурсивную обработку документа при преобразовании, в XSLT существуют так называемые встроенные шаблоны. Несмотря на то, что они не описываются в преобразованиях явным образом, встроенные шаблоны применяются процессорами по


13.2.2. Шаблоны

Из книги автора

13.2.2. Шаблоны Вы хотите создать стандартный документ, например резюме, служебную записку, отчет? Тогда вам пригодятся стандартные шаблоны MS Word. Выполните команду Файл, Создать. В правой части окна Word появится окошко Создание документа, в котором можно выбрать один из


Шаблоны

Из книги автора

Шаблоны Шаблон – это своего рода набросок, который можно изменить под конкретные нужды. Очень часто вам придется писать однотипные сообщения вроде «Привет. Как дела?» или «Я сегодня занят. Когда освобожусь – перезвоню!». Вы можете облегчить себе жизнь, записав подобные


Шаблоны

Из книги автора

Шаблоны Если вам часто приходится создавать документы одного типа, вы можете значительно повысить эффективность работы с помощью шаблонов. Шаблон – это заготовка нового документа, содержащая текст, рисунки, стили и другие элементы.Чтобы познакомиться с возможностями


Шаблоны

Из книги автора

Шаблоны Шаблон представляет собой заготовку или бланк для часто используемых документов. Можно воспользоваться готовым шаблоном, загрузить шаблон из Интернета или использовать в качестве шаблона любую ранее сохраненную книгу.Для создания нового документа на основе