Click here to Skip to main content
Click here to Skip to main content

Template based programming

By , 24 Mar 2002
 

Introduction

As we already know of inheritance, it is a good way of reusing your code. However, Visual C++ provides another way of reusing your code. We can do this through templates. With templates you can make the 'type' parameter. Let me explain. When you had this class that shows all processor information. The class is huge, and it uses all integers. What if, in time, the integer wouldn't be able to store the information of the processor (just because it's out of range for the integer). Now you'll need to review all your code and change the integers to longs. Or when you have this class that handles int arrays, and someday you'll need the exact same class, only you want it to handle floats.

Details

For these problems we have templates. Let me show you some code:

class CMyIntArray
{ 
public: 
    int GetSize();//gets the size of the array int 
    SetSize();//sets the size of the array 
    void Add(int Value);//adds a value to the array etc...
}

As it becomes clear from this code, you cannot handle floats with this class. A float class would look like this:

class CMyFloatArray
{ 
public: 
    int GetSize();//gets the size of the array int 
    SetSize();//sets the size of the array 
    void Add(float Value);//adds a value to the array etc...
}

Ok, we can handle this little bit of change.. but what if you had lots of functions, and what if we needed them same class for short, char etc...

You might now the old C macros (#define), template based programming is just like that (in a way). But, type macros aren't type safe, templates are. If you want to know how to create a template please look at the code below:

//Use of templates in Visual C++ by Clemens Timmermans (maxcode.com)
template <typename Type>
class CMyArray
{ 
public:
    void Add(Type Value);
    int GetSize();
    int SetSize();
};

That wasn't so hard? right? Now lets see how we can USE this template, by the following code snippet:

    ...
    // USING CMyArray
    CMyArray <int> iArray;
    iArray.Add(100);
    ////////////////////
    CMyArray<float> fArray;
    fArray.Add(10.2);
    /////////////////////
    ...
    //you got the point of basic template use!

No, finally, we may also use the Templates as containers. Checkout the following code:

class CMercedes
{
public:
    int GetMaxSpeed();//this gets the max speed of the car
    void SpeedUp();
    CMercedes();
    virtual ~CMercedes();
}

in template based programming we would make it look like this, no matter what the brand is.

//what if we want to create a template class 
//which needs to take any valid car

template <typename MyCar>
class CTemplateCar
{
private:
    MyCar theCar;
public:
    CTemplateCar(){}
    virtual ~CTemplateCar(){}
    void SpeedUpWhateverCarWeLike()
    {
        theCar.SpeedUp();
    }
}

now, as we want to use the template.. use this code to use it!

    ...
    CTemplateCar<CMercedes>  car;
    car.SpeedUpWhateverCarWeLike();
    CTemplateCar<CFerrari>  car2;
    car2.SpeedUpWhateverCarWeLike();
    ...

I hope this article has helped you understand the meaning of template based programming, but above all, how to use it and why use it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

MAXcode
United States United States
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 2memberzxw196217 Aug '10 - 16:53 
GeneralA couple of other pointsmemberChristian Graus25 Mar '02 - 23:23 
GeneralRe: A couple of other pointsmemberJörgen Sigvardsson26 Mar '02 - 1:14 
GeneralRe: A couple of other pointsmemberChristian Graus - Inlaw Programmer26 Mar '02 - 8:07 
Jörgen Sigvardsson wrote:
When's .NET going to support template code generation so that I can also fully enjoy it?
 
By the middle of the year, I believe.

 
Christian
 
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
 
"I'm somewhat suspicious of STL though. My (test,experimental) program worked first time. Whats that all about??!?!
- Jon Hulatt, 22/3/2002

GeneralA couple of other pointsmemberChristian Graus25 Mar '02 - 23:23 
GeneralRe: A couple of other pointsmemberPaul Selormey26 Mar '02 - 1:11 
GeneralRe: A couple of other pointsmemberChristian Graus - Inlaw Programmer26 Mar '02 - 8:05 
GeneralRe: A couple of other pointsmemberPaul Selormey26 Mar '02 - 13:23 
GeneralRe: A couple of other pointsmemberChristian Graus26 Mar '02 - 20:29 
GeneralRe: A couple of other pointsmemberMike_Beard6 Aug '02 - 5:51 
Generalrating mathmemberNish [BusterBoy]25 Mar '02 - 14:20 
GeneralRe: rating mathmemberChristian Graus25 Mar '02 - 23:11 
GeneralRe: rating mathmemberNish [BusterBoy]25 Mar '02 - 23:20 
GeneralI'm sorry, but....memberChristian Graus25 Mar '02 - 10:57 
GeneralRe: I'm sorry, but....memberNish [BusterBoy]25 Mar '02 - 14:23 
GeneralRe: I'm sorry, but....memberChristian Graus25 Mar '02 - 19:54 
GeneralheymemberNish [BusterBoy]25 Mar '02 - 8:19 
GeneralThe game for babymembersoptest25 Mar '02 - 10:10 
GeneralRe: The game for babymemberNish [BusterBoy]25 Mar '02 - 14:24 
GeneralRe: The game for babymembersoptest25 Mar '02 - 14:37 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130516.1 | Last Updated 25 Mar 2002
Article Copyright 2002 by MAXcode
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid