C++ Function Templates overloading

   Function templates in C++ are used if the same set of code/algorithm needs to be applied for different data types. The same logic need not be repeatedly written for different data types, involving lots of manual effort in development, testing, debugging and fixing. Instead C++ compiler itself takes the burden and produces different signatures for each data type, if templates are used. The C++ function templates explains some of the c++ function templates basics.

   C++ Function templates can also be overloaded as like normal functions. In normal C++ function overloading, the function can have different data types as well as different number of parameters. But in case of templates, the overloading happens only with the number of parameters, as it can already handle many data types.

Declaring Function Templates - C++ Function Templates Overloading:

   Function template declarations usually include a keyword typename or class, to specify that the parameters are going to be of generic type. The following code snippets include declarations for two different overloaded min functions, with the ability to handle 2 and 3 parameters each.

#include <iostream.h>

template <class T>
T&  min(T  &tParam1, T  &tParam2)
{
    if(tParam1 < tParam2)
       return tParam1;
    else
       return tParam2;
}

template <class T>
T&  min(T  &tParam1, T  &tParam2, T  &tParam3)
{
    if(min(tParam1, tParam2) < tParam3)
       return min(tParam1, tParam2) ;
    else
       return tParam3;
}

Calling Function Templates - C++ Function Templates Overloading:

   Now we can call min function with 2 or 3 parameters. The following are some of the ways of calling the function templates declared above.

int l_intValue;
l_intValue = min<>(9,6); //calls min(int,int)
cout<<"Minimum of int: "<<l_intValue<<endl;

double l_dblValue;
l_dblValue= min(10.5,11.3); //Calls min(double,double)
cout<<"Minimum of Double: "<<l_dblValue<<endl;

double l_dblValue1;
// l_dblValue1= min(10,11.3); //Returns Error saying ambiguous call
// cout<<"Minimum of Double: "<<l_dblValue1<<endl;

l_intValue = min(3,6,4);
cout<<"Minimum int 3 Parameters: "<<l_intValue<<endl;
 

   The above code sample calls the function templates with only 2 different data types. It can handle all data types. For every such data type, the C++ compiler generates a function signature and uses it when the function is called.

   A very important point to be noted here is, the function templates will not be able to handle any ambiguous calls. The code sample in the red colored section, cannot be resolved by the C++ compiler. This can be resolved by explicitly specifying the data type inside angular brackets.

l_dblValue1= min<double>(10,11.3); //Can be resolved by C++ compiler
 

Mixing Normal functions - C++ Function Templates Overloading:

   The c++ function templates overloading can also be mixed with normal c++ functions. The following function signature can also be mixed with the above code and this will also be used by the C++ compiler while resolving function calls.

int min(int fParam1,int fParam2)
{

    cout << "Normal function called for "<< fParam1 << " " <<fParam2 <<endl;

    if(fParam1 < fParam2)
         return fParam1;
    else
         return fParam2;
}

   If the above normal function is mixed, this can handle the ambiguous function calls also. Another point to be noted is, the resolution mechanism for a function call will always prefer a normal c++ function in case of equals. But if the best match is with the template function, it will prefer the templates. If one wants to instruct the compiler to specifically use a C++ function template, he can do so as in the code section marked in green color.
 

Close    To Top
  • Prev Article-Programming:
  • Next Article-Programming:
  • Now: Tutorial for Web and Software Design > Programming > cplus > Programming Content
    Photoshop Tutorial
     

    Special Effect

      3D Effect
      Photoshop Articles
    Programming Tutorial
     

    C/C++ Tutorial

      Visual Basic
      C# Tutorial
    Database Tutorial
     

    MySQL Tutorial

      MS SQL Tutorial
      Oracle Tutorial
    Geek Tutorial
     

    Blogging Tutorial

      RSS Tutorial
      Podcasting Tutorial
    Graphic Design Tutorial
      Coreldraw Tutorial
      Illustrator Tutorial
      3D Tutorials
    Webmaster Articles
     

    Domain Service

      Web Hosting
      Site Promotion
    Java Tutorial/ Articles
     

    Java Servlets

      JavaEE Tutorial
     

    JavaBeans Tutorial

    XML Tutorial/ Articles
     

    XML Style

      AJAX Tutorial
      XML Mobile
    Flash Tutorial/ Articles
     

    Flash Video

      Action Script
      Flash Articles
    OS Tutorial/ Articles
      Linux Tutorial
      Symbian Tutorial
      MacOS Tutorial
    Personal Tech
      Hardware Tutorial
      Software Tutorial
      Online Auction