Skip to content
C++

Templates

Function templates and class templates.

By EZ4Code Team
templategeneric

Code

#include <iostream>
#include <vector>

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

// Multi-parameter template
template<typename T, typename U>
auto add(T a, U b) -> decltype(a + b) {
    return a + b;
}

// Class template
template<typename T, size_t N>
class Array {
    T data[N];
public:
    T& operator[](size_t i) { return data[i]; }
    const T& operator[](size_t i) const { return data[i]; }
    constexpr size_t size() const { return N; }
};

// Variadic template
template<typename... Args>
void print(Args... args) {
    ((std::cout << args << " "), ...); // C++17 fold expression
}

// Template specialization
template<typename T>
struct TypeName { static const char* get() { return "unknown"; } };
template<>
struct TypeName<int> { static const char* get() { return "int"; } };

int main() {
    std::cout << max_val(3, 5) << std::endl;
    std::cout << max_val(3.14, 2.71) << std::endl;
    std::cout << add(1, 2.5) << std::endl;

    Array<int, 5> arr;
    arr[0] = 10;
    std::cout << arr[0] << " size=" << arr.size() << std::endl;

    print(1, "hello", 3.14, 'c');
    std::cout << "\n" << TypeName<int>::get() << std::endl;
    return 0;
}

Explanation

Templates implement generic programming; typename defines type parameters; variadic templates with fold expressions handle arbitrary parameters.

More C++ Snippets