C++ Templates

Introduction to C++ Templates

Templates C++ का एक important feature है। Templates C++ में generic programming की ability provide करते है। Generic programming में आप generic type के functions और classes create करते है।

Generic type के functions और classes दूसरे types (int, float, double आदि ) से independent होते है। इसलिए जो data type आप parameter के रूप में pass करते है, generic function और class उसी type के बन जाते है। ऐसा करने से आपको हर data type के लिए अलग से functions और classes लिखने की आवश्यकता नहीं होती है और आपके program में unnecessary code नहीं होता है।

Templates के माध्यम से आप C++ में generic type के functions और classes create करते है। Template classes और functions को parameters के साथ define किया जाता है। ये parameter actual data type के द्वारा replace कर दिया जाता है और फिर functions और classes उसी type के बन जाते है।

आइये अब C++ में template functions और classes के बारे में जानने का प्रयास करते है।

C++ Template Functions

एक template function किसी normal function की तरह ही होता है बस फर्क सिर्फ इतना होता है की एक template function कई तरह के data types (int, float आदि ) के लिए execute हो सकता है। यदि आप functions के द्वारा अलग अलग data types के लिए कोई identical task perform करना चाहते है तो आप एक template function create कर सकते है।

उदाहरण के लिए यदि आप addition का function create करते है तो हर data type (int, float आदि ) के लिए आपको अलग function create करना होगा। Integer type के लिए create किया गया addition function float values को नहीं add करेगा।

जैसा की आपको पता है की task एक ही (addition) है पर आपको functions अलग अलग create करने होंगे। ऐसी situation में आप सिर्फ एक addition का template function create कर सकते है जो जरुरत पड़ने पर integers और floats दोनों को add कर देगा।

हालाँकि ये काम आप function overloading द्वारा भी कर सकते है लेकिन उसमे भी आपको बहुत अधिक code लिखना होगा। Template function create करने से आपको code भी कम लिखना पड़ेगा और काम भी आप आसानी से कर पाएंगे।

आइये अब देखते है की C++ में आप किस प्रकार एक template function create कर सकते है। इसका general syntax नीचे दिया जा रहा है।

template<class T>
return-type function-name (arguments with type T)
{
     // Statements to be executed (with T type)
}

ऊपर दिए गए syntax में T एक parameter है जो की अलग अलग data types के द्वारा replace कर दिया जाता है और class एक keyword है। Class की जगह आप typename भी यूज़ कर सकते है। Basically ये बताता है की यँहा के data type का नाम पास किया जायेगा। आइये अब इसे एक उदाहरण से समझने करते है।

#include<iostream>
using namespace std;

template<class T>              //Template Function
    T add(T x, T y)
     {
         return x + y;
     }

int main()
{
    cout<<"Sum of 5 & 3 is :"<<add(5,3); // Adding integers
    cout<<"Sum of 5.2 & 3.2 is :"<<add(5.2,3.2);     //Adding floats    

    return 0;
}

जैसा की आप ऊपर दिए गए example में देख पा रहे है, एक ही function द्वारा integer और floating point दोनों तरह की values को add किया जा रहा है। ऐसा सिर्फ template functions के द्वारा ही संभव है। ये program निचे दिया गया output generate करता है।

Sum of 5 & 3 is : 8
Sum of 5.2 & 3.2 is : 8.4

C++ Template Classes

कभी कभी ऐसा भी होता है की आप अलग अलग data types के साथ एक जैसी classes create करते है। जैसे की आप एक class बनाते है जो किसी number को object construct करते समय argument के रूप में लेती है और बाद में display() function के द्वारा इस number को display करती है। इस प्रकार आपको हर तरह (int, float, double) के number के लिए अलग से class create करनी होगी। ऐसी situation में आप template class create कर सकते है।

कभी ऐसा भी हो सकता है की आपको program बनाते समय ये पता ना हो की user किस प्रकार की values enter करेगा। यानि की आपको ये पता ना हो की आपकी class के data members (variables) किस type के होंगे। उदाहरण के लिए user का current bank balance whole number भी हो सकता है और floating point number भी हो सकता है। इस situation में भी आप template classes create कर सकते है।

जब आप template class create करते है तो उसके सभी functions को आप आसानी से template functions बना सकते है। आइये अब देखते है की आप किस प्रकार एक template class create कर सकते है। इसका general syntax नीचे दिया जा रहा है।

template<class T>
class class-name
{
    //Statements with T data type as required
}

ऊपर दिए गए syntax में जैसा की आपको पता है template एक keyword है और actual data type के लिए placeholder है।

Template class के objects create करने का तरीका भी अलग होता है। इसका syntax नीचे दिया जा रहा है।

class-name <data-type> object-name(arguments-list);  

आइये अब template classes को एक complete उदाहरण के माध्यम से समझने का प्रयास करते है।

#include <iostream>
using namespace std;

template<class T>
class NumDisplay
{
    private:
               T num;
    public:
                NumDisplay(T n)
                {
                      num = n;        
                 }

                 void display()
                 {
                      cout<<"Number is : "<<num;
                  }
};

int main()
{
     NumDisplay<float> obj(5.2);   //Passing data type & float value to constructor
     obj.display();

     return 0;
}

ऊपर दिए गए उदाहरण में जब object construct होगा तो T float द्वारा replace कर दिया जायेगा और class में declare किया गया num variable float type का बन जाएगा। इस प्रकार template classes के माध्यम से ऐसी situations को भी handle कर सकते है जब आपको पता ना हो की user किस तरह की value enter करेगा। ये program निचे दिया गया output generate करता है।

Number is : 5.2