VIP Шаблоны (Templates) в C++

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Шаблоны позволяют создавать универсальный код. Разберем использование шаблонов.

Функции-шаблоны
Код:
#include <iostream>
using namespace std;

template <typename T>
T maximum(T a, T b) {
    return (a > b) ? a : b;
}

int main() {
    cout << maximum(5, 10) << endl; // 10
    cout << maximum(3.14, 2.71) << endl; // 3.14
    cout << maximum('a', 'z') << endl; // z
    
    return 0;
}

Классы-шаблоны
Код:
#include <iostream>
using namespace std;

template <typename T>
class Stack {
private:
    T* data;
    int top;
    int capacity;
    
public:
    Stack(int size) {
        capacity = size;
        data = new T[capacity];
        top = -1;
    }
    
    ~Stack() {
        delete[] data;
    }
    
    void push(T item) {
        if(top < capacity - 1) {
            data[++top] = item;
        }
    }
    
    T pop() {
        if(top >= 0) {
            return data[top--];
        }
        return T();
    }
    
    bool isEmpty() {
        return top == -1;
    }
};

int main() {
    Stack<int> intStack(10);
    intStack.push(1);
    intStack.push(2);
    cout << intStack.pop() << endl; // 2
    
    Stack<string> stringStack(10);
    stringStack.push("Hello");
    stringStack.push("World");
    cout << stringStack.pop() << endl; // World
    
    return 0;
}

Множественные параметры
Код:
#include <iostream>
using namespace std;

template <typename T, typename U>
class Pair {
private:
    T first;
    U second;
    
public:
    Pair(T f, U s) : first(f), second(s) {}
    
    T getFirst() { return first; }
    U getSecond() { return second; }
};

int main() {
    Pair<int, string> pair(1, "One");
    cout << pair.getFirst() << " - " << pair.getSecond() << endl;
    
    return 0;
}

Специализация шаблонов
Код:
#include <iostream>
using namespace std;

template <typename T>
void print(T value) {
    cout << value << endl;
}

// Специализация для строк
template <>
void print<string>(string value) {
    cout << "String: " << value << endl;
}

int main() {
    print(123); // 123
    print(3.14); // 3.14
    print(string("Hello")); // String: Hello
    
    return 0;
}

Важные моменты:
- Используйте шаблоны для универсального кода
- Применяйте специализацию при необходимости
- Документируйте требования к типам
- Тестируйте с разными типами

Шаблоны делают код более гибким и переиспользуемым!
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху