मैंने चलती औसत के लिए एक साधारण कक्षा लिखी जिसे एवीआर के साथ उपयोग किया जा सकता है।पूरे वर्ग के शरीर की प्रतिलिपि बनाने और चिपकाने के बिना टेम्पलेट का विशेषज्ञ कैसे करें?
template<typename T, typename Tsum = int32_t>
class MovingAverage { ... }
लेकिन अब मैं कॉपी किए बिना ही नाव के लिए इस वर्ग के विशेषज्ञ और पूरी कक्षा शरीर चिपका कर और बदल सभी टी और Tsum फ्लोट करने के लिए और कहा कि मैं दो टेम्पलेट पैरामीटर का उपयोग करने की जरूरत नहीं है चाहता हूँ। Tsum 'sum' चर के लिए प्रकार है जहां टाइप टी के सभी पास किए गए मानों को सारांशित किया गया था। यदि टी 'uint8_t' है, तो योग के लिए 'uint32_t' का उपयोग करना एक अच्छा विचार है, लेकिन फ्लोट या डबल के लिए उच्च परिशुद्धता वाले डेटाटाइप का उपयोग करने की आवश्यकता नहीं है, इसलिए मुझे इस उद्देश्य के लिए केवल एक पैरामीटर चाहिए।
typedef MovingAverage<float, float> MovingAverage<float>
या इस तरह से:: मैं इसे इस तरह से काम कर सकता था सोचा
template<>
class MovingAverage<float> : public MovingAverage<float, float> {};
लेकिन मैं गलत था और मैं जहां मैं अपने कोड दो बार लिखने के लिए है ही समाधान मिल गया।
क्या कक्षा केवल एक बार लिखने का कोई तरीका है और फिर इसे पसंद करते हैं इस तरह विशेषज्ञ? अग्रिम धन्यवाद!
पुस्तक के लिए +1, मुझे याद दिलाता है मैं और अधिक पढ़ना चाहिए :) –
@ डैनियलफ्रे पुस्तक अच्छी तरह से पढ़ी गई है, बहुत ही शैक्षिक, सी ++ 11 संस्करण की प्रतीक्षा नहीं कर सकती है। 'Std :: is_floating_point' चाल के लिए – TemplateRex