2011-09-14 13 views
12

मैं एक वर्ग है क्योंकि यह अन्य सीपीपी से नहीं देखा जाएगा, जिसमें टेम्पलेट घोषणा के साथ हेडर शामिल हो सकता है)।निजी टेम्पलेट कार्यों

लेकिन निजी कार्यों के बारे में क्या? क्या कोई मुझे बता सकता है कि एक .cpp फ़ाइल में निजी टेम्पलेट फ़ंक्शंस को लागू करने के विपक्ष हैं?

+0

http://stackoverflow.com/questions/4315969/where-to-define-c-class-member-template-function-and-functors-that-instantiate/4316020#4316020 –

+1

जबकि सवाल तकनीकी रूप से था अलस और निकोला ने जवाब दिया, मेरे लिए यह सिर्फ सवाल पूछता है कि आपने इसे एक सदस्य टेम्पलेट क्यों बनाया है। क्या यह सीपीपी फ़ाइल के नाम (नामित नामस्थान) में एक नि: शुल्क फ़ंक्शन टेम्पलेट के रूप में रखना बेहतर नहीं होगा? मैंने पाया है कि, समय के साथ, मैंने निजी सदस्य कार्यों को कम से कम, वर्ग के कार्यान्वयन फ़ाइल (नामित नामस्थान) के मुक्त कार्यों का अधिक से अधिक उपयोग किया। .. 'तो जब तक उपरोक्त नियमों का पालन किया जाता है यह अभी भी इंटरफेस और कार्यान्वयन शीर्षक और स्रोत files' में अलग करना ठीक है ** के विपरीत है ** >>' और वह कारण है, टेम्प्लेट उपलब्ध हैं: – sbi

उत्तर

10

जब एक समारोह टेम्पलेट एक तरीका है कि अपने इन्स्टेन्शियशन चलाता है में प्रयोग किया जाता है, (कुछ बिंदु पर) एक संकलक कि टेम्पलेट की परिभाषा को देखने की जरूरत है। और यही कारण है कि टेम्पलेट आमतौर पर इनलाइन फ़ंक्शंस का उपयोग करके हेडर फ़ाइल के अंदर लागू होते हैं।

तो जब तक उपरोक्त नियमों का पालन किया जाता है यह अभी भी इंटरफेस और कार्यान्वयन शीर्षक और स्रोत फ़ाइलों में अलग करना ठीक है।


संदर्भ:
सी ++ 03 मानक, § 14.7.2.4:

परिभाषा एक गैर निर्यात समारोह टेम्पलेट के, एक गैर निर्यात सदस्य समारोह टेम्पलेट, या एक गैर निर्यात सदस्य समारोह या एक वर्ग टेम्पलेट के स्थिर डेटा सदस्य हर अनुवाद इकाई जिसमें यह स्पष्ट रूप से instantiated है में मौजूद होगा।

+0

इस विरोधाभासी नहीं है आम तौर पर इनलाइन फ़ंक्शंस का उपयोग करके हेडर फ़ाइल के अंदर कार्यान्वित किया जाता है। ', या क्या मुझे कुछ याद आया? – Nawaz

+0

@ नवाज: आपके प्रश्न का उत्तर देने के लिए अपडेट किया गया। HTH। –

+0

यह मेरे प्रश्न का उत्तर नहीं देता है। आपने कहा, परिभाषा .cpp फ़ाइल में हो सकती है, कैसे? – Nawaz

6

जब तक आपकी निजी सदस्य समारोह टेम्पलेट सदस्य कार्यों कि इनलाइन वर्ग परिभाषा के दायरे में परिभाषित कर रहे हैं के द्वारा प्रयोग किया जाता है, मैं इस दृष्टिकोण के साथ कुछ भी गलत नहीं देखते हैं। इसके विपरीत, मुझे लगता है कि कम निर्भरता आपकी शीर्षलेख फ़ाइलों में रेंगती है, बेहतर।

यह तब तक काम करेगा जब तक आप के सम्मेलन को हमेशा पर लागू करेंगे, प्रत्येक वर्ग के कार्यान्वयन को एक स्रोत फ़ाइल में प्रदान करते हैं।