मेरे पास क्लास माई क्लास है जो टाइपनाम टी पर टेम्पलेट किया गया है। लेकिन अंदर, मुझे एक विधि चाहिए जो किसी अन्य प्रकार के टीटी पर टेम्पलेट हो (जो कि इससे संबंधित नहीं है टी)।टीटी पर एक टेम्पलेटेड क्लास के अंदर टी पर टेम्पलेटेड विधि: क्या यह संभव/सही
पढ़ने/फेरबदल के बाद, मैं निम्नलिखित अंकन मिला:
template <typename T>
class MyClass
{
public :
template<typename TT>
void MyMethod(const TT & param) ;
} ;
शैलीगत कारणों के लिए (मैं एक हेडर फाइल में मेरी टेम्प्लेटेड वर्ग घोषणा, और एक अन्य हेडर फाइल में विधि परिभाषाओं को लेना पसंद), मैं वर्ग घोषणा के अंदर विधि को परिभाषित नहीं करेगा।
template <typename T> // this is the type of the class
template <typename TT> // this is the type of the method
void MyClass<T>::MyMethod(const TT & param)
{
// etc.
}
मुझे पता था कि मैं विधि में इस्तेमाल किया typenames "घोषित" था, लेकिन नहीं कैसे वास्तव में पता नहीं था, और परीक्षणों और त्रुटियों के माध्यम से पाया: तो, मैं के रूप में यह लिखने के लिए की है।
दृश्य सी ++ 2008 पर संकलित उपरोक्त कोड, लेकिन: क्या टी पर टेम्पलेट किए गए वर्ग के अंदर टीटी पर एक विधि को टेम्पलेट करने का यह सही तरीका है?
बोनस के रूप में: क्या इस तरह के कोड के पीछे छिपी हुई समस्याएं/आश्चर्य/बाधाएं हैं? (मुझे लगता है कि विशेषज्ञता लिखने के लिए काफी मनोरंजक हो सकती है)
विशेषज्ञता के लिए: आप एक वर्ग समारोह को स्पष्ट रूप से विशेषज्ञता वाले वर्ग के बिना विशेषज्ञ नहीं कर सकते: http://stackoverflow.com/questions/2097811/c-syntax-for-explicit-specialization-of-a-template- समारोह में एक-टेम्पलेट स्तरीय/2114807 –