C++ Templates

Templates in C++ programming allows function or class to work on more than one data type at once without writing different codes for different data types. Templates are often used in larger programs for the purpose of code reusability and flexibility of program. The concept of templetes can be used in two different ways:

  • Function Templates
  • Class Templates

Function Templates

A function templates work in similar manner as function but with one key difference. A single function template can work on different types at once but, different functions are needed to perform identical task on different data types. If you need to perform identical operations on two or more types of data then, you can use function overloading. But better approach would be to use function templates because you can perform this task by writing less code and code is easier to maintain.

How to define function template?

A function template starts with keyword template followed by template parameter/s inside  < > which is followed by function declaration.

template <class T>
 T some_function(T arg)
{
   .... ... ....
}

In above code, T is a template argument and class is a keyword. You can use keyword typename instead of class in above example. When, an argument is passed to some_function( ), compiler generates new version of some_function() to work on argument of that type.

Example of Function Template


/* C++ program to display larger number among two numbers using function templates. */
/* If two characters are passed to function template, character with larger ASCII value is displayed. */

#include <iostream>
using namespace std;
template <class T>
T Large(T n1, T n2)
{
	return (n1>n2) ? n1:n2;
}
int main()
{
	int i1, i2;
	float f1, f2;
	char c1, c2;
	cout<<"Enter two integers: ";
	cin>>i1>>i2;
	cout<<Large(i1, i2)<<" is larger.";
	cout<<"\n\nEnter two floating-point numbers: ";
	cin>>f1>>f2;
	cout<<Large(f1, f2)<<" is larger.";
	cout<<"\n\nEnter two characters: ";
	cin>>c1>>c2;
	cout<<Large(c1, c2)<<" has larger ASCII value.";
	return 0;
}

Output

Output of function template of a C++ program.

Explanation

In this program, data of three different types: int, float and char is passed to function template and this template returns the larger of two data passed. In function template data type is represented by name: T in above example. During run-time, when integer data is passed to template function then, compiler knows the type to use is int. Similarly, when floating-point data and char data is passed, it knows the type to use is float and char respectively. After knowing the information of a type, it generates the specific version of Large( ) to work for that type.

Example to Swap Datas Using Concept of Templates


/* C++ program to swap datas entered by user. */

#include <iostream>
using namespace std;
template <typename T>
void Swap(T &n1, T &n2)
{
	T temp;
	temp = n1;
	n1 = n2;
	n2 = temp;
}

int main()
{
	int i1=1, i2=2;
	float f1=1.1, f2=2.2;
	char c1='a', c2='b';
	cout<<"Before passing data to function template.\n";
	cout<<"i1 = "<<i1<<"\ni2="<<i2;
	cout<<"\nf1 = "<<f1<<"\nf2="<<f2;
	cout<<"\nc1 = "<<c1<<"\nc2="<<c2;

	Swap(i1, i2);
	Swap(f1, f2);
	Swap(c1, c2);

        cout<<"\n\nAfter passing data to function template.\n";
	cout<<"i1 = "<<i1<<"\ni2="<<i2;
	cout<<"\nf1 = "<<f1<<"\nf2="<<f2;
	cout<<"\nc1 = "<<c1<<"\nc2="<<c2;
	return 0;
}

Output

Before passing data to function template.
i1 = 1
i2 = 2
f1 = 1.1
f2 = 2.2
c1 = a
c2 = b

After passing data to function template.
i1 = 2
i2 = 1
f1 = 2.2
f2 = 1.1
c1 = b
c2 = a