Головна » Шаблоны в C++

Шаблоны в C++

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

Так вот: того же результата (только быстрее и, если разобраться, значительно проще) можно достичь, используя шаблоны. И, кстати, если вдруг в созданной функции обнаружится ошибка – изменения будет значительно проще внести в шаблон, нежели в функции-клоны.

Шаблон представляет собой описание функции (или же класса) благодаря которому, в процессе выполнения программы, происходит генерация конкретной функции (или же класса). В принципе, шаблон можно рассматривать как строку подстановку (которая является аналогом препроцессора).

Ниже приведу пример простейшего шаблона. Будем создавать вектор, содержащий целые числа, строки, символы.

Код вносится в заглавный файл:

template // T - параметр шаблона
class TVector
{
public:
  TVector(int); // Конструктор класса Tvector

  ~TVector() // Деструктор
  {
    delete [] data;
  }

  // Расширение действия (перегрузка) операции "[]":
  T &operator [](int i)
  {
    return data [i];
  }

protected:
  T *data;  // Начало одномерного массива
  int size; // Количество элементов в массиве
};

Непосредственно код нашого вектора:

template TVector ::TVector(int n)
{
  data = new T[n];
  size = n;
};

Инициализация может быть выполнена так:

 TVector X(5);                    //Создаем объект класса "целочисленный вектор"
  TVector C(5);                   // Создаем объект класса "символьный вектор"
  TVector S(5);     // Создаем объект класса "строчный вектор" 

Обращение к созданным классам в дальнейшем выполняется так же, как если бы классы создавались без помощи шаблона.

femil

5 коментарів до “Шаблоны в C++

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

      1. За все надо платить. Под каждый тип компилятору приходится генерить определенную служебную информацию.
        Поэтому, шаблоны не всегда продуктивны

        1. На счет продуктивности – да, не всегда. Материал носит скорее информационный характер, нежели призыв использовать их повсеместно.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Повернутись до верху