Templates C++

En C++ contamos con los templates, estos nos ayudan a hacer funciones que aceptan diferentes tipos de parametros como argumentos.
A continuacion un ejemplo simple:

#include <iostream>
#include <string>
using namespace std;
template<class T> T suma(const T & a, const T & b) {
    return a + b;
}
int main(){
    cout<< suma(1, 2) <<endl;
    cout<< suma(1.2, 1.3) <<endl;
    cout<< suma(string("hola "), string("templates")) <<endl;
}

Como se puede ver la funcion acepta diferentes tipos de parametros y retorna la suma.