CPP templates acts as a support for generic programming technique, where parameters in algorithms are of generic types and thus can work for a variety of data types. This feature in CPP is used to define the generic classes and generic functions.
Types of CPP Templates:
- Function Templates:
In function templates, templates for a function is defined.
Syntax:
template < class Ttype> ret_type func_name(parameter_list)
{
// code to be executed
}
- Ttype:
This parameter is used to represent a placeholder name, to be replaced by the compiler, for a data type, within the function definition.
- class:
This keyword is used before Ttype to specify a generic type in a template declaration.
Syntax: Function Templates with Multiple Parameters:
template <class T1, class T2,…..>
return_type function_name (arguments of type T1, T2….)
{
// code to be executed
}
Important points:
- Function template is used by generic functions to define a set of operations that can be applied to the various types of data.
- The generic functions can be overloaded by overloading the template functions (can differ in the parameter list).
- For all the versions of a function, a generic function executes the same operation for the same data type.
Example:
#include <iostream.h> using namespace std; template<class A> A mul(A &x,A &y,A &z) { A product = x*y*z; return product; } int main() { float n1 = 50; float n2 = 40; float n3 = 30; cout<<"Product of " << n1 << ", " << n2 << " and " << n3 <<" is : "<< mul(n1,n2,n3); return 0; } |
Output
Product of 50, 40 and 30 is : 60000 |
- Class Template:
In class templates, templates for a class is defined.
Syntax:
template <class Ttype>
class class_name
{
// code to be executed
}
- Ttype:
This parameter is used to represent a placeholder name, to be replaced by the compiler, for a data type, within the class definition.
Syntax: Creating an instance of a class
class_name <type> ob;
- type:
This parameter is used to specify the type of the data that the class is operating on.
- ob:
This parameter is used to specify the name of the object.
Syntax: Class Templates with Multiple Parameters:
template<class T1, class T2, ……>
class class_name
{
// code to be executed
}
Non Type Template Arguments
The non-type arguments such as strings, function names, constant expression and built-in types can also be used in addition to the type T argument.
Example:
#include <iostream.h> using namespace std; template<class X> class A { public: X n1 = 50; X n2 = 20; X n3 = 30; void mul() { std::cout<<"Product of " << n1 << ", " << n2 << " and " << n3 <<" is : "<< n1*n2*n3<<std::endl; } }; int main() { A<int> m; m.mul(); return 0; } |
Output
Product of 50, 20 and 30 is : 30000 |