Шаблоны в С++

НАВИГАЦИЯ ПО СТРАНИЦЕ

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

Шаблоны в C++ — это мощный механизм, который позволяет создавать обобщенные (универсальные) функции и классы. Они позволяют писать код, который может работать с разными типами данных без необходимости создания отдельных версий для каждого типа. Вот основные принципы использования шаблонов в C++:

Шаблоны функций:

#include <iostream>

// Шаблон функции для обмена значениями между двумя переменными
template <typename T>
void swapValues(T& a, T& b) {
    T temp = a;
    a = b;
    b = temp;
}

int main() {
    int x = 5, y = 10;
    double a = 3.14, b = 6.28;

    // Использование шаблонной функции
    swapValues(x, y);
    swapValues(a, b);

    std::cout << "x: " << x << ", y: " << y << "\n";
    std::cout << "a: " << a << ", b: " << b << "\n";

    return 0;
}

Шаблоны классов:

#include <iostream>

// Пример шаблона класса "Pair" для представления пары значений любого типа
template <typename T1, typename T2>
class Pair {
public:
    T1 first;
    T2 second;

    Pair(const T1& a, const T2& b) : first(a), second(b) {}
};

int main() {
    // Использование шаблонного класса
    Pair<int, double> myPair(5, 3.14);

    std::cout << "Pair values: " << myPair.first << " and " << myPair.second << "\n";

    return 0;
}

Шаблоны функций с несколькими параметрами:

#include <iostream>

// Шаблон функции с несколькими параметрами
template <typename T, int N>
T multiplyByConstant(T value) {
    return value * N;
}

int main() {
    int result = multiplyByConstant<int, 5>(10);
    std::cout << "Result: " << result << "\n";

    return 0;
}

Особенности использования шаблонов:

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

  2. Явная специализация: Разработчик может явно указывать конкретные типы для шаблонов в случаях, когда требуется управление специфичным поведением.

  3. Несколько параметров: Шаблоны могут иметь несколько параметров, включая типы, целочисленные значения и указатели на функции.

  4. Ограничения (Constraints): С++20 предоставляет механизмы для добавления ограничений на типы, передаваемые в шаблоны.

  5. Шаблоны-члены: Шаблоны могут быть использованы внутри классов для создания шаблонных членов класса.

Использование шаблонов в C++ существенно расширяет возможности создания универсального кода и повышает гибкость программирования.