2013-04-18 15 views
5

मेरे कोड है:गैर डेटाटाइप टेम्पलेट पैरामीटर, अधिक विशेषज्ञता उत्पन्न?

#include <iostream> 

using namespace std; 


template <typename T, int X> 

class Test 
{ 
    private: 
    T container[X]; 
    public: 
    void printSize(); 

}; 
template <typename T, int X> 
void Test<T,X>::printSize() 
{ 
    cout <<"Container Size = "<<X <<endl; 
} 


int main() 
{ 
    cout << "Hello World!" << endl; 
    Test<int, 20> t; 
    Test<int, 30> t1; 

    t.printSize(); 
    t1.printSize(); 
    return 0; 
} 

प्रश्न:

  1. कितने विशेषज्ञता उत्पन्न हो जाएगा ?. अगर मैं सही ढंग से समझ, यह दो विशेषज्ञताओं एक <int, 20> के लिए है उत्पन्न करता है और एक और <int, 30> के लिए है। कृपया मेरी समझ गलत है अगर सही है?
  2. वहाँ देखने के लिए/किसी भी रिवर्स इंजीनियरिंग द्वारा उत्पन्न विशेषज्ञताओं की संख्या की जांच कोई तरीका है?
+1

यह http://stackoverflow.com/questions/4448094/can-we-see-the-template-instantiated-code-by-c-compiler – FireAphis

+0

@FireAphis मदद मिल सकती है, धन्यवाद। – Whoami

उत्तर

2

1) हाँ, दो instantiations संकलक द्वारा उत्पन्न हो जाएगा, लेकिन लिंकर समान उत्पन्न कोड के साथ कार्य (पूरे कार्यक्रम अनुकूलन जैसे प्रयोग करके) विलय सकता है, इस कोड ब्लोट कम करने के लिए एक प्यारा तरीका है ।

2) इस question जहां यह समझाया गया है कि कैसे जीसीसी टेम्पलेट इन्स्टेन्शियशन उत्पादन उत्पन्न कर सकते हैं देखते हैं।

3

वहाँ विशेषज्ञताओं यहाँ, केवल instantiations (this questions अंतर बताते हैं) नहीं हैं। यह कोड कक्षा टेम्पलेट Test के दो तत्कालता उत्पन्न करता है।

+0

मुझे लगता है कि विशेषज्ञता कहने पर उसका मतलब जेनरेट-क्लास था। मैं वास्तव में नहीं समझता कि क्यों दो (वर्ग) बनाए जाते हैं, अगर यह अभी भी दोनों बार एक int है। – Infested

+0

@ 'X' के मान को – TemplateRex

+0

@rhalbersma ive ने मान लिया है, लेकिन यह अभी भी एक int है। मैं इसे कैसे लिखूंगा ताकि "एक्स" भाग कोई फर्क नहीं पड़ता? – Infested

0

1) कितने विशेषज्ञता उत्पन्न हो जाएगा ?. अगर मैं सही ढंग से समझता हूं, तो यह दो विशेषज्ञताओं को उत्पन्न करता है और दूसरा है। कृपया मेरी समझ गलत है अगर सही है?

हाँ, वहाँ दो हैं।

2) क्या किसी भी रिवर्स इंजीनियरिंग द्वारा उत्पन्न विशेषज्ञता की संख्या देखने/जांचने का कोई तरीका है?

यदि आपके पास कोड है, तो आपको रिवर्स इंजीनियरिंग की आवश्यकता नहीं है। यदि आपके पास यह नहीं है, तो आप इसे जेनरेट कोड से नहीं ढूंढ सकते हैं, क्योंकि यह संकलित समय है।

0

a) विशेषज्ञता के 2 उदाहरणों अपने उदाहरण में बनाया जाए।

बी) कक्षा के लिए उत्पन्न विशेषज्ञता की संख्या का समर्थन करने के लिए कोई अंतर्निहित विधि नहीं है। यदि यह आपकी परियोजना है तो आप स्थिर गणना जोड़ सकते हैं। यदि आप चाहते हैं कि आप अपनी कक्षा के लिए अपना संदर्भ गणना तंत्र लिख सकें। हमारे निर्माता में वृद्धि स्थिर गणना। लिंक के लिए

static int created = 0; 
static int alive = 0; 
class Test 
{ 
counter() 
    { 
     created++; 
     alive++; 
    } 
~counter() 
{ 
    created--; 
} 
//Rest of class 
}; 
+0

आपका काउंटर कक्षा के उदाहरणों की संख्या की गणना करेगा, टेम्पलेट के तत्काल नहीं। – Angew

संबंधित मुद्दे