C++ Программирование в среде С++ Builder 5



             

Создание представителей шаблона - часть 2


for (int i=NumRec-l; i>-l; i--) {

cout << db.Rec(i).Get() << " Error: ";

cout << db.Error() << endl;

}

return 0;

}

Вывод программы показан на рис. 10.2.

В начале файла программы находится определение класса Record, который используется как аргумент шаблона DataBase. Это класс строк с конструктором по умолчанию и операциями чтения-записи содержимого строки.

Программа создает представитель шаблонного класса DataBase< Record, 4> и выполняет над ним различные действия — запись строк в “поток”, позиционирование, чтение.

Рис. 10.2 Программа UsetmpI

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

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

Для удобства работы с шаблонными классами можно воспользоваться определением typedef, например:

template<class T> TmplClass { ... };

typedef TmplClass<int> IClass;

IClass iCIassObj; IClass *iCiassPtr; iCIassPtr = new IClass;




Содержание  Назад  Вперед