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.