C++ Templates
C++ Templates
Function Templates:
A function template allows you to define a generic function that can work with various types. Here's a simple example of a function template for swapping two values:
#include <iostream>
// Function template for swapping values
template <typename T>
void swapValues(T &a, T &b) {
T temp = a;
a = b;
b = temp;
}
int main() {
int x = 5, y = 10;
std::cout << "Before swapping: x = " << x << ", y = " << y << std::endl;
// Call the function template with int types
swapValues(x, y);
std::cout << "After swapping: x = " << x << ", y = " << y << std::endl;
double a = 3.14, b = 6.28;
std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;
// Call the function template with double types
swapValues(a, b);
std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;
return 0;
}
Class Templates:
Class templates allow you to define generic classes with member functions and member variables that operate on template parameters. Here's an example of a simple class template for a generic pair:
#include <iostream>
// Class template for a generic pair
template <typename T1, typename T2>
class Pair {
public:
T1 first;
T2 second;
// Constructor
Pair(const T1 &f, const T2 &s) : first(f), second(s) {}
// Member function to display the pair
void displayPair() {
std::cout << "(" << first << ", " << second << ")" << std::endl;
}
};
int main() {
// Create an instance of Pair with int and double types
Pair<int, double> myPair(5, 3.14);
// Display the pair
myPair.displayPair();
return 0;
}
Template Specialization:
Template specialization allows you to provide specific implementations for certain template parameter values. For example, you might want to provide a specialized implementation for a specific data type. Here's a brief example:
#include <iostream>
// Generic template
template <typename T>
void printType() {
std::cout << "Generic type" << std::endl;
}
// Template specialization for int
template <>
void printType<int>() {
std::cout << "Type is int" << std::endl;
}
int main() {
printType<double>(); // Calls the generic template
printType<int>(); // Calls the specialized template for int
return 0;
}
In this example, the printType function template has a specialization for the int type.
Templates provide a flexible way to write generic code in C++. They are widely used in the standard library and are an essential part of modern C++ programming. Understanding how to use templates can lead to more reusable and generic code.