2014-09-02 10 views
6

मान लीजिए मैं:गैर-टेम्पलेट वर्ग के अंदर टेम्पलेट फ़ंक्शन का मेमोरी मॉडल?

template <typename T> 
class A 
{ 
    //Do something with T 
}; 

मुझे पता है कि संकलक प्रत्येक अलग T कोड में परिभाषित के लिए एक class A<T> उत्पन्न होगा।

क्या होगा यदि मैं है:

class B 
{ 
    template <typename T> 
    void f() { /* Do something with T */ } 
}; 

class B का केवल एक ही परिभाषा लेकिन प्रत्येक अलग T इसके साथ कहा जाता है के लिए f() के कई भार के वहाँ होगा?

+1

हां। यह और क्या हो सकता है? –

+3

ओम असेंबली स्तर में कोई कक्षा परिभाषा नहीं है। हर वर्ग विधि को छुपा "यह" पैरामीटर के साथ वैश्विक फ़ंक्शन में संकलित किया जाता है। टेम्पलेटेड फ़ंक्शन प्रत्येक संकलन इकाई में, प्रत्येक तत्काल प्रकार के लिए वैश्विक फ़ंक्शन में संकलित किया जाता है। –

+0

संभावित डुप्लिकेट? [टेम्पलेट सदस्य समारोह के साथ कक्षा, एक ही कक्षा है?] (Http://stackoverflow.com/questions/11121910/class-with-templated-member- कार्यक्षमता-is-the-same-class) –

उत्तर

1

हां, f<T> के प्रत्येक तत्कालता के साथ कंपाइलर द्वारा उत्पन्न f() की परिभाषा होगी।
कंपाइलर के आधार पर, f() को इनलाइनिंग के कारण अनुकूलित किया जा सकता है या यह कोड सेगमेंट में केवल इतना स्थान प्राप्त कर सकता है।

हालांकि, मैं शायद ही कभी इस तरह के डिज़ाइन में आया हूं जहां आपके पास गैर-स्थैतिक टेम्पलेट सदस्य फ़ंक्शन (बिना किसी तर्क के!) एक गैर-टेम्पलेट वर्ग के अंदर है।

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