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



             

Разное


В этом параграфе мы расскажем о некоторых возможностях шаблонов, предусмотренных в стандартном C++, но не реализуемых компилятором C++Builder. Нам кажется, что о них необходимо рассказать, хотя бы для того, чтобы, читая другие книги по C++, вы не пытались осуществить в C++Builder методики, которые на нем осуществить невозможно.

В конце концов, C++Builder не является универсальным инструментом. Он ориентирован на визуальное программирование, а те моменты, о которых мы будем здесь говорить, второстепенны с этой, да и, пожалуй, с любой другой точки зрения.

Если у вас есть Borland C++ 5 или более поздняя версия, и вы хотя бы немного умеете с ним работать, то можете при желании разобрать с его помощью приведенные ниже примеры.

Специализация шаблона класса

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

#include <iostream.h>

#include <string.h>

const int DefSize = 4;

template <class T> Glass MyArray { protected:

int size;

int current;

T *arr;

public:

MyArray (int n = DefSize) { size = n;

current = 0;

arr = new T[size];

}

~MyArray ();

void Insert(const T Sitem);

T &Get(int idx) { return arr[idx]; } };

// Общий шаблон Insert:

template <class T> void MyArray<T>::Insert(const T Sitem)

{

if (current == size) return;

arr[current++] = item;

}

// Специализированная Insert для параметра char*:

void MyArray<char*>::Insert(char* const Sitem)

{

if (current == size) return;

arr[current] = new char[strlen(item) + 1];

strcpy(arr[current++], item);

}

// Общий деструктор:

template <class T>

MyArray<T>::-MyArray () ( delete[] arr; }

// Специализированный деструктор:

MyArray<char*>::-MyArray() (




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