Lesson 19 of 25

Templates

Function and Class Templates

Templates let you write generic code that works with any data type. The compiler generates specific versions for each type used.

Example
// Function template
template<typename T>
T findMax(T a, T b) {
    return (a > b) ? a : b;
}

cout << findMax(10, 20) << endl;      // 20
cout << findMax(3.14, 2.71) << endl;  // 3.14
cout << findMax('a', 'z') << endl;    // 'z'

// Class template
template<typename T>
class Stack {
private:
    vector<T> data;
public:
    void push(const T& item) { data.push_back(item); }
    T pop() {
        T top = data.back();
        data.pop_back();
        return top;
    }
    bool empty() const { return data.empty(); }
    int size() const { return data.size(); }
};

Stack<int> intStack;
intStack.push(1);
intStack.push(2);
cout << intStack.pop() << endl; // 2

Stack<string> strStack;
strStack.push("hello");