Templates enable generic programming. The compiler generates specific code for each type used.
1// Function template2template<typename T>3T max(T a, T b) {4 return (a > b) ? a : b;5}67int result = max(3, 5); // Compiler generates max<int>8double d = max(2.5, 3.5); // Compiler generates max<double>910// Class template11template<typename T, size_t N>12class Array {13 T data[N];14public:15 T& operator[](size_t i) { return data[i]; }16 constexpr size_t size() const { return N; }17};1819Array<int, 10> arr;20arr[0] = 42;
Types of template parameters: