C++ Template Functions
In C++, you can create template functions, which are functions that are parameterized by one or more types. Template functions allow you to write a single function that can be used with different types, without having to write separate functions for each type.
Here's an example of a template function that finds the maximum value in an array of values:
template <typename T> T max_value(T* values, int size) { T max = values[0]; for (int i = 1; i < size; i++) { if (values[i] > max) { max = values[i]; } } return max; }
In this example, we define a function called max_value
that is parameterized by a single type T
. The function takes two arguments: an array of values of type T
, and an integer size
that specifies the number of elements in the array. The function returns the maximum value in the array.
To use the max_value
function with a particular type, you can call it with that type:
int int_values[] = {1, 2, 3, 4}; int max_int = max_value<int>(int_values, 4); double double_values[] = {1.1, 2.2, 3.3, 4.4}; double max_double = max_value<double>(double_values, 4);
In this example, we call the max_value
function with two different types (int
and double
). In each case, we specify the type parameter in angle brackets (<...>
) immediately following the function name.
You can also use type inference to avoid specifying the type parameter explicitly, as in the following example:
int int_values[] = {1, 2, 3, 4}; int max_int = max_value(int_values, 4); double double_values[] = {1.1, 2.2, 3.3, 4.4}; double max_double = max_value(double_values, 4);
In this example, the compiler infers the type parameter from the type of the argument passed to the function.
In summary, template functions in C++ allow you to write generic functions that can be used with different types. To define a template function, you use the template
keyword followed by the list of type parameters in angle brackets (<...>
), and then use the type parameter name(s) wherever you would normally use a type in the function definition. To use a template function, you call it with the desired type(s) and then use the resulting function as you would any other function.