#include <iostream>
using namespace std;
// One function works for all data types. This would work
// even for user defined types if operator '>' is overloaded
template <typename T> T myMax(T x, T y)
{
return (x > y) ? x : y;
}
int main()
{
cout << myMax<int>(3, 7) << endl; // Call myMax for int
cout << myMax<double>(3.0, 7.0)
<< endl; // call myMax for double
cout << myMax<char>('g', 'e')
<< endl; // call myMax for char
return 0;
}
#include <iostream>
using namespace std;
// One function works for all data types. This would work
// even for user defined types if operator '>' is overloaded
template <typename T>
T myMax(T x, T y)
{
return (x > y)? x: y;
}
int main()
{
cout << myMax<int>(3, 7) << endl; // Call myMax for int
cout << myMax<double>(3.0, 7.0) << endl; // call myMax for double
cout << myMax<char>('g', 'e') << endl; // call myMax for char
return 0;
}
A template is a simple and yet very powerful tool in C++. The simple idea is to
pass data type as a parameter so that we don’t need to write the same code for
different data types.
For example, a software company may need sort() for
different data types. Rather than writing and maintaining the multiple codes,
we can write one sort() and pass data type as a parameter.
C++ adds two new keywords to support templates: ‘template’ and ‘typename’. The
second keyword can always be replaced by keyword ‘class’.
/*
C++ template functions are an alternamive way to write a function that
can take different data types. C++ Template functions are only one
function, so if you need to make a change, then it only has to be done
once. Here is an example of a 'get_doubled' templated function:
*/
#include <iostream>
using std::cout;
template <typename T> // Now, T is a type of variable, for this scope:
void say_something(T input) {
cout << input << "
";
}
int main(void) {
say_something(45); // Uses a int
say_something("Hello"); // Uses a string
say_something(90.5); // Uses a float/double
return 0;
}
// templates are used if the logic of function is same but
// it differs due to data type.
/*Here is an example to show how user defined function print
can be made to print data of different data types.*/
template <class T>
T print (T a)
{
cout << a;
}
int main()
{
print('a');
print(1);
}
namespace std {
template<typename t> struct hash<MyClass<t>>
{
size_t operator() (const MyClass<t>& c) const;
}
}
// You can also do things like
template<template<typename t> class type> func_name<type<t>>();
template <class T>//or <typename T> it´s the same
//T can be int, float, double, etc.
//simple use example:
T sum(T a, T b)
{
return a + b;
}
sum(5.0f, 10f);//sum using float
sum(2,3);//sum using int