मुझे यह पता है..मुझे लगता है कि यह कुछ होना चाहिए जो आपको पूरा करने में मदद करता है?
// This might be in a header file:
template <typename T>
class xyz {
void foo();
};
// ...
// This might be later on in the header file:
void xyz<T>::foo() {
// generic definition of foo()
}
यह एक के लिए गलत है:
defining a member function outside of its template
यह इस तरह एक टेम्पलेट वर्ग के एक सदस्य समारोह की परिभाषा प्रदान करने के लिए ठीक नहीं है कुछ कारण तो यह है:
void xyz<class T>::foo() {
// generic definition of foo()
}
उचित परिभाषा टेम्पलेट कीवर्ड और एक ही टेम्पलेट तर्क वर्ग खाके की परिभाषा के साथ घोषित किया गया था की जरूरत है।ताकि देता है:
template <typename T>
void xyz<T>::foo() {
// generic definition of foo()
}
नोट इस तरह के सदस्य टेम्पलेट्स, आदि के रूप में टेम्पलेट निर्देशों के अन्य प्रकार, हैं कि, और प्रत्येक अपने स्वयं के प्रारूप पर ले जाता है। यह जानना महत्वपूर्ण है कि आपके पास कौन सा है, इसलिए आप जानते हैं कि प्रत्येक स्वाद को कैसे लिखना है। यह इसलिए विशेष रूप से है क्योंकि कुछ कंपाइलरों के त्रुटि संदेश गलत नहीं होने के कारण स्पष्ट नहीं हो सकते हैं। और निश्चित रूप से, एक अच्छी और अद्यतित किताब प्राप्त करें।
आप किसी टेम्पलेट के भीतर एक नेस्टेड सदस्य टेम्पलेट है, तो:
template <typename T>
struct xyz {
// ...
template <typename U>
struct abc;
// ...
};
कैसे आपने xyz के बाहर एबीसी परिभाषित करते हैं? यह काम नहीं करता:
template <typename U>
struct xyz::abc<U> { // Nope
// ...
};
है और न ही ऐसा करता है:
template <typename T, typename U>
struct xyz<T>::abc<U> { // Nope
// ...
};
आप ऐसा करने के लिए होगा:
template <typename T>
template <typename U>
struct xyz<T>::abc {
// ...
};
ध्यान दें कि यह ...abc
नहीं ...abc<U>
है क्योंकि एबीसी एक "प्राथमिक" है टेम्पलेट। आईओएस, यह अच्छा नहीं है:
// यहां अनुमति नहीं है: टेम्पलेट टेम्पलेट संरचना xyz :: abc {};
मैंने कभी भी संदर्भ नहीं देखा है जो इंगित करता है कि कक्षा घोषणा के अंदर एक विधि निकाय को परिभाषित करने से वह विधि इनलाइन हो जाती है। क्या मुझे कुछ याद आ रहा है? – Dathan
@Dathan: यहां देखें: http://www.parashift.com/c++-faq-lite/inline-functions.html#faq-9.8 और यहां: http: //msdn.microsoft.com/en-us /library/bw1hbe6y%28VS.80%29.aspx – Ben
@Dathan: आप C++ मानक के §9.3/2 को याद कर रहे हैं, जो कहता है: "एक सदस्य फ़ंक्शन को इसकी कक्षा परिभाषा में परिभाषित किया जा सकता है (8.4) जिसमें यदि यह एक इनलाइन सदस्य फ़ंक्शन है ... "संपादित करें: यह भी ध्यान दें कि यह एक वर्ग परिभाषा है - एक वर्ग घोषणा कुछ ऐसा है:' वर्ग x; ' –