Templates
Templates are C++'s way to write type-independent code. Unlike runtime polymorphism (virtual functions), templates generate specialized code at compile time — zero runtime overhead. The entire STL is built on templates.
40 min•By Priygop Team•Last updated: Feb 2026
Template Code
Example
#include <iostream>
#include <string>
using namespace std;
// Function template
template <typename T>
T maxValue(T a, T b) {
return (a > b) ? a : b;
}
// Class template
template <typename T, int Size>
class FixedArray {
T data[Size];
int count = 0;
public:
void push(const T &value) {
if (count < Size) data[count++] = value;
}
T get(int index) const { return data[index]; }
int size() const { return count; }
// Iterator support
T *begin() { return data; }
T *end() { return data + count; }
};
// Template specialization
template <typename T>
void print(const T &value) {
cout << value << endl;
}
template <> // Full specialization for bool
void print<bool>(const bool &value) {
cout << (value ? "true" : "false") << endl;
}
// Variadic template (C++11)
template <typename T>
T sum(T value) { return value; }
template <typename T, typename... Args>
T sum(T first, Args... rest) {
return first + sum(rest...);
}
int main() {
// Function template (type deduced)
cout << maxValue(3, 7) << endl; // int
cout << maxValue(3.14, 2.71) << endl; // double
cout << maxValue<string>("abc", "xyz") << endl; // explicit
// Class template
FixedArray<int, 5> nums;
nums.push(10); nums.push(20); nums.push(30);
for (int val : nums) cout << val << " ";
// Specialization
print(42); // "42"
print(true); // "true" (specialized)
// Variadic template
cout << sum(1, 2, 3, 4, 5) << endl; // 15
return 0;
}