क्या CRTP का ज्यादा इस्तेमाल होता है? और यह क्यों / नहीं है? [बन्द है]


11

मैं उत्सुकता से आवर्ती टेम्पलेट पैटर्न के बारे में सोच रहा हूं ।

मुझे यह काफी उपयोगी लगता है, और यह कई कार्यों के लिए बहुत अच्छी तरह से समायोज्य है। लेकिन मुझे स्वीकार करना होगा, मुझे जंगल में CRTP कोड ज्यादा नहीं दिख रहा है।

क्या यह समझ पाना मुश्किल है? क्या वर्चुअल फ़ंक्शंस आसान हैं? क्या यह उन 90% मामलों के लिए उपयोग नहीं किया जाना चाहिए जहां वर्चुअल कीवर्ड दिखाई देता है?

जवाबों:


8

सरल तथ्य यह है कि कई, यदि अधिकांश नहीं हैं, तो सी ++ उपयोगकर्ता शायद ही समझ सकते हैं जो इससे vectorबेहतर है mallocऔर freeइसलिए, वह संख्या जो न केवल सराहना कर सकती है, बल्कि उन्नत टेम्पलेट मेटाप्रोग्रामिंग को लागू करने के लिए बहुत अधिक नहीं है। इसका मतलब यह है कि भले ही यह 90% स्थितियों के लिए अच्छा था, आप इसे बहुत कम में देखेंगे, सिर्फ इसलिए क्योंकि लोग इसके बारे में नहीं जानते हैं या इसका उपयोग कैसे करें।

हालांकि, आभासी कार्यों करते फायदे हैं, अर्थात्, आभासी कार्यों ज्यादा CRTP से उपयोग करने के लिए आसान है। C ++ टेम्प्लेट लगभग किसी भी चीज और हर चीज के बारे में कुतिया होने के लिए कुख्यात हैं, और शामिल किए जाने वाले मॉडल गेंदों को चूसते हैं।

हालांकि, वे [आभासी कार्य] विशिष्ट रूप से धीमे और कम शक्तिशाली हैं। उदाहरण के लिए, मैं अभी CRTP का उपयोग कर कोड लिख रहा हूं, जहां आप अभिव्यक्ति टेम्पलेट्स के साथ उपयोग के लिए ऑपरेटर ओवरलोड का वारिस करते हैं। वहाँ कोई रास्ता नहीं आभासी कार्यों संभवतः उस काम कर सकता है।


1
क्या यह कुछ विडंबनापूर्ण नहीं है कि 'वर्चुअल' के उपयोग से बचने के लिए CRTP द्वारा उपयोग की जाने वाली भाषा-सुविधा 'वस्तुतः' कुछ भी और सबकुछ के बारे में है?
कैसरलुडी

6

डब्ल्यूटीएल सीआरटीपी का उपयोग करता है। क्रोमियम ब्राउज़र सॉफ्टवेयर का एक जाना-माना उदाहरण है जो डब्ल्यूटीएल का उपयोग करता है, इसलिए मैं कहूंगा कि इसका उपयोग "जंगली" में किया गया है।

90% के बारे में? यह निश्चित रूप से एक overstatement है। क्या आपने कभी बहुरूपी वस्तुओं के कंटेनर का उपयोग किया है? यह बहुरूपता का एक बहुत ही सामान्य उपयोग है और आप CRTP के साथ ऐसा नहीं कर सकते क्योंकि Base<DerivedA>ऐसा नहीं है Base<DerivedB>


-5

यहाँ कारण है कि इसका अधिक व्यापक रूप से उपयोग क्यों नहीं किया जाता है:

  1. यह हैक है
  2. एक हैक के रूप में, यह गारंटी नहीं है कि जब आप इसका उपयोग करते हैं तो आप मुसीबत में नहीं चलते हैं। बड़ी संख्या में परियोजनाओं द्वारा सामान्य OO सामान का उपयोग किया गया है, और ठीक से काम करने के लिए पाया गया / समस्याओं को अच्छी तरह से जाना जाता है, CRTP केवल कम संख्या में परियोजनाओं में पाया जाता है, और कोई डेटा उपलब्ध नहीं है
  3. इसका उपयोग करने का कोई अच्छा कारण नहीं है - सबसे अधिक कारण यह है कि सिर्फ मान्य नहीं हैं
  4. यह कुछ चीजों को और अधिक जटिल बना सकता है

11
यह सबसे सुरक्षित रूप से हैक नहीं है। व्यवहार बहुत अच्छी तरह से परिभाषित किया गया है, और इसका बहुत उपयोग है।
१०:४१ पर डेडएमजी

5
हां, पूरी एसटीएल एक बड़ी हैक है।
२०:

क्या आप अपना उत्तर संपादित कर सकते हैं और समझा सकते हैं कि यह हैक क्यों है?
निक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.