Информатика и технология программирования


Шаблоны - часть 2



vector&#60int&#62 a;
vector&#60double&#62 b;
extern class time;
vector&#60time&#62 c;

Заметим, что транслятором при определении каждого вектора с новым типом объектов генерируется описание нового класса по заданному шаблону (естественно, неявно в процессе трансляции). Например, для типа int транслятор получит:


class vector&#60int&#62
{
int tsize;
int csize;
int **obj;
public:
int *operator[](int);
void insert(int*);
int index(int*);
};

Далее следует очевидное утверждение, что функции- элементы шаблона также должны быть параметризованы, то есть генерироваться для каждого нового типа данных. Действительно, это так: функции-элементы шаблона классов в свою очередь также являются шаблонными функциями с тем же самым параметром. То же самое касается переопределяемых операторов:


//------------------------------------------------------bk73-12.cpp


// параметр шаблона - класс "T", внутренний тип данных


// имя функции-элемента или оператора - параметризовано


//


template &#60class T&#62 T* vector&#60T&#62::operator[](int n)
{
if (n &#62=tsize) return(NULL);
return (obj[n]);
}
template &#60class T&#62 int vector&#60T&#62::index(T *pobj)
{
int n;
for (n=0; n&#60tsize; n++)
if (pobj == obj[n]) return(n);
return(-1);
}

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


int* vector&#60int&#62::operator[](int n)
{
if (n &#62=tsize) return(NULL);
return (obj[n]);
}
int vector&#60int&#62::index(int *pobj)
{
int n;
for (n=0; n&#60tsize; n++)
if (pobj == obj[n]) return(n);
return(-1);
}

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


Начало  Назад  Вперед



Книжный магазин