EDUCBA

EDUCBA

MENUMENU
  • Free Tutorials
  • Free Courses
  • Certification Courses
  • 600+ Courses All in One Bundle
  • Login

Templates in C++

By Priya PedamkarPriya Pedamkar

Home » Software Development » Software Development Tutorials » C ++ Programming Tutorial » Templates in C++

Templates in C++

Introduction to Templates in C++

When it comes to powerful features in any programming language C++ is considered as the first priority. Templates are the example of powerful C++ feature. It’s a code written in a way to make it independent of the data type. The template is a formula for creating generic functions or classes. Generic programming is used where generic types are used as arguments in algorithms for compatibility with different data types. You don’t have to write the code again and again for performing the same operation just for a change in the data type of a function or class.

Types of Templates in C++

There are basically two types of templates in the C++ programming language.

Start Your Free Software Development Course

Web development, programming languages, Software testing & others

Types of Templates in C++

Let’s have a look at them:

1. Function Templates

As we are using generic programming therefore this function templates is just a normal function with only one key difference. Normal function can work only with defined data type inside the function whereas function template is designed in such a way that makes it independent of the data types, in fact, these templates can work with any data type you want.

The general syntax for defining a function template is:

template <class F>
F function_name ( F args ) {
Function body
}

Here, F is the template argument and class is a keyword. F can accept different data types.

Here is the C++ program to demonstrate the function template in programming.

Popular Course in this category
C++ Training (4 Courses, 5 Projects, 4 Quizzes)4 Online Courses | 5 Hands-on Projects | 37+ Hours | Verifiable Certificate of Completion | Lifetime Access | 4 Quizzes with Solutions
4.5 (5,233 ratings)
Course Price

View Course

Related Courses
Java Training (40 Courses, 29 Projects, 4 Quizzes)C Programming Training (3 Courses, 5 Project)

Code:

#include <iostream>
using namespace std;
template <typename F>
void swapping(F &arg1, F &arg2)
{
F temporary;
temporary = arg1;
arg1 = arg2;
arg2 = temporary;
}
int main()
{
int x = 100, y = 200;
double p = 100.53, q = 435.54;
char ch1 = 'A', ch2 = 'Z';
cout << "See the original data here\n";
cout << "x = " << x << "\ty = " << y<<endl;
cout << "p = " << p << "\tq = " << q<<endl;
cout << "ch1 = " << ch1 << "\t\tch2 = " << ch2<<endl;
swapping(x, y);
swapping(p, q);
swapping(ch1, ch2);
cout << "\n\nSee the Data after swapping here\n"
cout << "x = " << x << "\ty = " << y<<endl;
cout << "p = " << p << "\tq = " << q<<endl;
cout << "ch1 = " << ch1 << "\t\tch2 = " << ch2<<endl;
return 0;
}

Output:

Function Templates

2. Class Templates

As we are using generic programming therefore this class templates is also similar to function templates. It’s like a normal class with only one key difference. Normally we declare a class so that it can work only with defined data type inside the class whereas class template is designed in such a way that makes it independent of the data types, in fact, these templates can work with any data type you want.

Instead of creating a new class every time for using a functionality based on a particular data type it is better to define a generic class template that is compatible with maximum data types. Class templates help us in code reusability which makes our program perform faster and produce better efficiency.

The general syntax for defining a class template is:

template <class F>
class Class_Name
{
... ..
public:
F variable;
F function_name(F arg);
... ..
};

Here F is the template argument for data type used, class_name can be according to your choice and a member variable name variable and a function with function_name is defined inside the class.

Here is the C++ program to demonstrate the class template in programming.

Code:

#include <iostream>
using namespace std;
template <class F>
class Calci
{
private:
F x, y;
public:
Calci(F p, F q)
{
x = p;
y = q;
}
void showresult()
{
cout << "The Numbers are: " << x << " and " << y << "." << endl;
cout << "Addition is: " << add() << endl;
cout << "Subtraction is: " << subtract() << endl;
cout << "Product is: " << multiply() << endl;
cout << "Division is: " << divide() << endl;
}
F add() { return x + y; }
F subtract() { return x - y; }
F multiply() { return x * y; }
F divide() { return x / y; }
};
int main()
{
Calci<int> intCalc(2, 1);
Calci<float> floatCalc(2.4, 1.2);
cout << "Int results:" << endl;
intCalc.showresult();
cout << endl << "Float results:" << endl;
floatCalc.showresult();
return 0;
}

Output:

Float results

3. Variadic Templates

Only templates that can take a variable number of arguments as the arguments are resolved at runtime and are type-safe. It is a better template to use as compared to others because the rest of the templates can only take fix number of arguments.

Here is the C++ program to demonstrate the Variadic template.

Code:

#include <iostream>
#include <string>
using namespace std;
template<typename F>
F aggregate(F val) {
return val;
}
template<typename F, typename... Args>
F aggregate(F first, Args... args) {
return first + aggregate(args...);
}
int main()
{
long total = aggregate(11, 72, 83, 78, 37);
cout<<"Total of long numbers = "<<total<<endl;
string s1 = "G", s2 = "o", s3 = "o", s4 = "d";
string s_concat = aggregate(s1, s2, s3, s4);
cout << "Total of strings = "<<s_concat;
}

Output:

Total of long numbers

Aggregate is the variadic function so we need a base function that can implement a base case after that we can implement variadic function at top of the functions. Once you write the template for the function that is implementing the base case we write a variadic function to implement it as a general case. This functionality is similar to recursion. The output we see is the aggregation of all the long integers and characters we have passed in the above C++ code.

Conclusion

The templates feature in the programming plays a vital role in making a program efficient in terms of performance and memory space because of the code reusability feature. Template functions can be easily overloaded as you can define a cluster of classes and functions for handling multiple data types.

Recommended Articles

This is a guide to Templates in C++. Here we discuss the basic concept, 3 different types of templates in C++ along with the respective examples. You can also go through our other suggested articles to learn more –

  1. Function Overloading in C++
  2. Type Casting in C++
  3. Abstraction in C++
  4. ifstream in C++

C++ Training (4 Courses, 3 Projects, 4 Quizzes)

4 Online Courses

5 Hands-on Projects

37+ Hours

Verifiable Certificate of Completion

Lifetime Access

4 Quizzes with Solutions

Learn More

0 Shares
Share
Tweet
Share
Primary Sidebar
C plus plus Programming Tutorial
  • Advanced
    • C++ namespace
    • Encapsulation in C++
    • Access Modifiers in C++
    • Abstract Class in C++
    • C++ Class and Object
    • What is Template Class in C++?
    • C++ Algorithm
    • Data Structures and Algorithms C++
    • C++ Garbage Collection
    • Virtual Keyword in C++
    • Access Specifiers in C++
    • Storage Class in C++
    • Call by Value in C++
    • Multimap in C++
    • C++ Multiset
    • C++ Lambda Expressions
    • Stack in C++
    • C++ Static
    • C++ static_cast
    • Deque in C++
    • C++ Vector Functions
    • C++ 2D Vector
    • C++ List
    • C++ Mutable
    • Enum in C++
    • Abstraction in C++
    • Signal in C++
    • C++ Queue
    • Priority Queue in C++
    • Regular Expressions in C++
    • C++ Hash Table
    • C++ Expression
    • File Handling in C++
    • C++ Stream
    • ifstream in C++
    • C++ ofstream
    • C++ fstream
    • C++ Read File
    • C++ iomanip
    • Macros in C++
    • Templates in C++
    • C++ setprecision
    • C++ Int to String
    • C++ thread( )
    • C++ Thread Pool
    • C++ thread_local
  • Basic
    • Introduction To C++
    • What is C++
    • Features of C++
    • Applications of C++
    • Best C++ Compiler
    • C++ Data Types
    • C++ Double
    • C++ unsigned int
    • User Defined Data Types in C++
    • Variables in C++
    • C++ Keywords
    • Pointers in C++
    • C++ Void Pointer
    • Function Pointer in C++
    • Iterator in C++
    • C++ Commands
    • Object in C++
    • C++ Literals
    • C++ Reference
    • C++ Undefined Reference
    • String in C++
    • C++ Programming Language (Basics)
    • C++ Identifiers
    • C++ Header Files
    • Type Casting in C++
    • C++ Formatter
  • Operators
    • C++ Operators
    • Arithmetic Operators in C++
    • Assignment Operators in C++
    • Bitwise Operators in C++
    • Relational Operators in C++
    • Boolean Operators in C++
    • Unary Operators in C++
    • C++ Operator[]
    • Operator Precedence in C++
    • C++ operator=()
  • Control Statements
    • Control Statement in C++
    • if else Statement in C++
    • Else If in C++
    • Nested if in C++
    • Continue Statement in C++
    • Break Statement in C++
    • Switch Statement in C++
    • goto Statement in C++
    • C++ Struct
    • Loops in C++
    • Do While Loop in C++
    • Nested Loop in C++
  • Functions
    • C++ getline()
    • C++ String Functions
    • Math Functions in C++
    • Friend Function in C++
    • Recursive Function in C++
    • Virtual Functions in C++
    • strcat() in C++
    • swap() in C++
    • strcmp() in C++
    • ceil function in C++
    • C++ begin()
    • size() in C++
    • C++ test()
    • C++ any()
    • C++ Bitset
    • C++ find()
    • C++?Aggregation
    • C++?String append
    • C++ String Copy
    • C++ end()
    • C++ endl
    • C++ push_back
    • C++ shuffle()
    • malloc() in C++
    • C++ reserve()
    • C++ unique()
    • C++ sort()
    • C++ find_if()
    • Reflection in C++
    • C++ replace()
    • C++ search()
    • C++ Memset
    • C++ size_t
    • C++ Substring
    • C++ Max
    • C++ absolute value
    • C++ memcpy
    • C++ wchar_t
    • C++ free()
    • C++ pair
    • C++ this
    • C++ sizeof()
    • C++ Move Semantics
  • Array
    • Arrays in C++
    • 2D Arrays in C++
    • 3D Arrays in C++
    • Multi-Dimensional Arrays in C++
    • C++ Array Functions
    • String Array in C++
    • C++ Length of Array
    • C++ arraylist
  • Constuctor and Destructor
    • Constructor and Destructor in C++
    • Constructor in C++
    • Destructor in C++
    • Copy Constructor in C++
    • Parameterized Constructor in C++
  • Overloading and overriding
    • Overloading and Overriding in C++
    • Overloading in C++
    • Overriding in C++
    • Function Overloading in C++
    • Function Overriding in C++
    • Method Overloading in C++
  • Inhertiance
    • Types of Inheritance in C++
    • Single Inheritance in C++
    • Multiple Inheritance in C++
    • Hierarchical Inheritance in C++
    • Multilevel Inheritance in C++
    • Hybrid Inheritance in C++
  • Sorting
    • Sorting in C++ 
    • Heap Sort in C++
    • C++ Vector Sort
    • Insertion Sort in C++
    • Selection Sort in C++
    • C++ QuickSort
    • Sort string C++
  • Programs
    • Patterns in C++
    • Star Patterns In c++
    • Swapping in C++
    • Reverse Number in C++
    • Palindrome Program in C++
    • Palindrome in C++
    • Factorial Program in C++
    • Fibonacci Series in C++
    • Square Root in C++
    • Random Number Generator in C++
    • Prime Number in C++
    • Leap Year Program in C++
    • Anagram in C++
    • Armstrong Number in C++
    • Reverse String in C++
    • Socket Programming in C++
    • Matrix Multiplication in C++
    • C++ using vs typedef
    • C++ vector vs list
    • C++ vector vs array
  • Interview question
    • C++ Interview Questions
    • Multithreading Interview Questions C++

Related Courses

C++ Training Course

Java Training Course

C Programming Course

Footer
About Us
  • Blog
  • Who is EDUCBA?
  • Sign Up
  • Corporate Training
  • Certificate from Top Institutions
  • Contact Us
  • Verifiable Certificate
  • Reviews
  • Terms and Conditions
  • Privacy Policy
  •  
Apps
  • iPhone & iPad
  • Android
Resources
  • Free Courses
  • Java Tutorials
  • Python Tutorials
  • All Tutorials
Certification Courses
  • All Courses
  • Software Development Course - All in One Bundle
  • Become a Python Developer
  • Java Course
  • Become a Selenium Automation Tester
  • Become an IoT Developer
  • ASP.NET Course
  • VB.NET Course
  • PHP Course

© 2020 - EDUCBA. ALL RIGHTS RESERVED. THE CERTIFICATION NAMES ARE THE TRADEMARKS OF THEIR RESPECTIVE OWNERS.

EDUCBA Login

Forgot Password?

EDUCBA
Free Software Development Course

Web development, programming languages, Software testing & others

*Please provide your correct email id. Login details for this Free course will be emailed to you
Book Your One Instructor : One Learner Free Class

Let’s Get Started

This website or its third-party tools use cookies, which are necessary to its functioning and required to achieve the purposes illustrated in the cookie policy. By closing this banner, scrolling this page, clicking a link or continuing to browse otherwise, you agree to our Privacy Policy

EDUCBA

*Please provide your correct email id. Login details for this Free course will be emailed to you
EDUCBA
Free Software Development Course

Web development, programming languages, Software testing & others

*Please provide your correct email id. Login details for this Free course will be emailed to you

Special Offer - C++ Training (4 Courses, 3 Projects, 4 Quizzes) Learn More