क्या विशिष्ट टेम्पलेट वर्ग में गैर-प्रकार के टेम्पलेट पैरामीटर के मानों तक पहुंच बनाना संभव है?क्या विशिष्ट टेम्पलेट वर्ग में गैर-प्रकार के टेम्पलेट पैरामीटर के मानों तक पहुंच बनाना संभव है?
अगर मैं विशेषज्ञता के साथ टेम्पलेट वर्ग है:
template <int major, int minor> struct A {
void f() { cout << major << endl; }
}
template <> struct A<4,0> {
void f() { cout << ??? << endl; }
}
मैं इसे उपरोक्त मामले पता है कि यह मान 4 और 0 के बजाय वेरिएबल का उपयोग करके लेकिन क्या मैं एक बड़े वर्ग है कि मैं कर रहा हूँ विशेषज्ञता है हार्डकोड करने के लिए सरल है और मैं मूल्यों तक पहुंचने में सक्षम होना चाहता हूं।
यह major
और minor
मानों तक पहुंच (4 और 0) संभव है एक < 4,0 में>? या मैं उन्हें स्थिरांक के रूप में टेम्पलेट इन्स्टेन्शियशन पर आवंटित करने के लिए है:
template <> struct A<4,0> {
static const int major = 4;
static const int minor = 0;
...
}
यदि आप मूल्यों के आधार पर विशेषज्ञता प्राप्त कर रहे हैं तो इसका तात्पर्य है कि उन विशेष मूल्यों के बारे में कुछ खास है। यदि आप उन्हें टेम्पलेट में सामान्य मानों के रूप में उपयोग कर रहे हैं और केवल कुछ स्थानों में उन्हें विशेष रूप से इलाज कर रहे हैं, तो हो सकता है कि आप विशेष व्यवहार को एक छोटे से विशिष्ट वर्ग टेम्पलेट में संक्षिप्त कर सकें, जिससे बड़े टेम्पलेट को पूरी तरह से सामान्य और अनसुलझा के रूप में छोड़ दिया जा सके। यह कहना मुश्किल है कि क्या आप अपने प्रश्न को और अधिक 'वास्तविक' के रूप में विस्तारित कर सकते हैं? –
मुझे लगता है कि सवाल काफी वास्तविक है। मेरे पास मौजूदा बेस क्लास है जो प्रोटोकॉल संस्करण के आधार पर विशिष्ट व्यवहार लागू करता है। पहले इसमें एक सदस्य था जो प्रोटोकॉल संस्करण लौटाता था - क्योंकि वह सदस्य अब उपलब्ध नहीं था वहां एक लॉगिंग विधि थी जिसमें आउटपुट में प्रोटोकॉल संस्करण शामिल था। मैं सिर्फ मूल्यों को हार्डकोड कर सकता था लेकिन मैं जानना चाहता था कि क्या बेहतर तरीका है या नहीं। स्वीकार्य उत्तर इसे करने का अच्छा तरीका प्रदान करता है - मैं वास्तव में अन्य स्थानों में इसी तरह के लक्षणों का उपयोग कर रहा हूं - पैरामीटर प्रकार प्राप्त करने के लिए, लेकिन इरादा वही है। – stefanB