मेरे पास हाल ही में मेरे हाथों में एक कोड के बारे में एक प्रश्न है।टेम्पलेट से विरासत सी ++
template< class I, class P, class D, unsigned int ID = 0 >
class PathFilter : public Filter< I, P, 1 >
{
...
}
template< class I, class A, unsigned int N = 1 >
class Filter : public Algorithm< I, A >
{
...
}
template< class I, class A >
class Algorithm : public A //This line
{
...
}
: मैं बस यह जानना चाहते हैं सी ++ टेम्पलेट्स प्रतिमान में यह निम्नलिखित विरासत (एक उदाहरण के रूप में सिर्फ 3 वर्गों) करने के लिए सही है या उपयोगी है चाहता हूँ
मेरा प्रश्न विशेष रूप से तीसरे उदाहरण में विरासत के बारे में है। क्या यह इतना 'सामान्य' बनाने के लिए उपयोगी है और सटीक नहीं है? अधिक सामान्य कोड द्वारा समझने योग्य कोड समझौता करना एक अच्छा विकल्प है?
मैं पहली बार पूछता हूं क्योंकि मैं सी ++ टेम्पलेट्स में एक विशेषज्ञ नहीं हूं, बल्कि इसलिए भी कि मुझे यह कोड टेम्पलेट्स का उपयोग करके समझने में मुश्किल लगता है (आमतौर पर टेम्पलेट्स के नाम इसकी सामग्री के बारे में कुछ भी नहीं कहते हैं)। कोई सलाह?
तो, अगर आप यही चाहते हैं, ठीक है। पठनीयता के रूप में, सच है, टेम्पलेट पैरामीटर को अजीब तरह से नामकरण करने की एक परंपरा है - I, P, A, आदि लेकिन आपको यह नहीं करना है :)। उन्हें बेहतर नाम दें और वे स्वयं वर्णनात्मक बन सकते हैं। –
आपके उत्तर के लिए धन्यवाद, लेकिन मुझे अभी भी एक प्रश्न है। मैं एक "उच्च" वर्ग में कुछ कार्यक्षमताओं की एक सामान्य और अमूर्त परिभाषा के उपयोग को समझता हूं। लेकिन टेम्पलेट का मुख्य उद्देश्य पैरामीटर प्रकारों को सामान्यीकृत नहीं करना है? तो मैं अंत में क्या कह रहा हूं कि मैं लगभग हर चीज को इस उच्च वर्ग में पास कर सकता हूं और निम्न-पदानुक्रम कार्यों को संरक्षित कर सकता हूं। अंत में मेरे पास ऑब्जेक्ट्स का एक बहुत ही सीमित सेट होगा जो निम्न कार्यों (शायद एक) को प्राप्त कर सकता है, क्या मैं गलत हूं? यह सामान्यता को परिभाषित करने के लिए एक अव्यवहारिक तरीका नहीं है? –
आप सही हैं।निश्चित रूप से 'एल्गोरिदम ' में कक्षाओं 'ए' का एक विशिष्ट सेट अंततः संकलन की अनुमति देता है (उन 'ए' को किसी भी तरह को 'एल्गोरिदम <> 'द्वारा निर्दिष्ट इंटरफ़ेस लागू करना चाहिए)। अब आप डिज़ाइन उद्देश्यों के लिए टेम्पलेट का उपयोग कर रहे हैं। आप क्या करना चाहते हैं 'एल्गोरिदम <>' लिखना है, और कई एल्गोरिदम (जैसे 'एल्गोरिदम', 'एल्गोरिदम ', ...) केवल कोड के छोटे टुकड़े लिखना (यानी कक्षाएं 'रेजकुटता', ' Symplectic' ...)। किसी भी तरह से आप इस प्रकार के संबंध में अभी भी सामान्य हैं। –
Acorbe