2009-02-24 21 views
7

बूस्ट में कई जगहें हैं जहां मुझे एक टेम्पलेटेड क्लास दिखाई देती है और मदद नहीं कर सकती है, लेकिन सोचें कि जिस व्यक्ति ने इसे लिखा है वह टेम्पलेट्स का उपयोग क्यों करता है।इतनी तेजी से क्यों बढ़ रहा है?

उदाहरण के लिए, म्यूटेक्स क्लास (एसएस)। सभी म्यूटेक्स अवधारणाओं को टेम्पलेट्स के रूप में कार्यान्वित किया जाता है जहां कोई अवधारणा से मेल खाने वाले इंटरफेस के साथ कुछ बेस क्लास या अमूर्त कक्षाएं बना सकता है।

उत्तर के बाद संपादित करें: मैंने वर्चुअल फ़ंक्शंस की लागत के बारे में सोचा था, लेकिन कभी-कभी बेहतर समझ के लिए बहुत कम प्रदर्शन दंड देने के लायक नहीं है? मेरा मतलब है कभी-कभी (विशेष रूप से बढ़ावा देने के साथ) templated कोड को समझना और टेम्पलेट्स का दुरुपयोग करने के परिणामस्वरूप संकलक त्रुटियों को डिक्रिप्ट करना वाकई मुश्किल है।

+0

इस लड़के के लिए अच्छा सवाल होगा: http://stackoverflow.com/users/5597/anthony-williams (boost.thread के लेखक): पी –

+0

सी ++ समुदाय का मुख्य दर्शन यह है कि "आप केवल यही प्राप्त करते हैं आप मांगते हैं"। बूस्ट प्रोजेक्ट टेम्पलेट का उपयोग करके सभी पुस्तकालयों को डिजाइन करके उस दर्शन का पालन करने के लिए, एसटीएल की तरह ही कोशिश कर रहा है। हालांकि, एक लागत है, जैसा कि आप उल्लेख करते हैं: समझ कभी-कभी पीड़ित होती है। यदि आप एक पुस्तकालय चाहते हैं तो आप आसानी से समझ सकते हैं, शायद आपको क्यूटी लाइब्रेरी पर एक नज़र रखना चाहिए। इसमें बूस्ट क्या करता है, और बहुत कुछ है! मेरी राय में, क्यूटी के डिजाइन बड़े पैमाने पर सी ++ विकास के लिए अनुमति देते हैं, कुछ बूस्ट पूरी तरह से कमी है। –

उत्तर

20

टेम्पलेट को आभासी कार्यों की आवश्यकता के बिना संकलन समय पर अत्यधिक अनुकूलित किया जा सकता है। बहुत से टेम्पलेट चालों को संकलन-समय बहुरूपता के रूप में सोचा जा सकता है। चूंकि आप संकलित समय पर जानते हैं कि आप कौन से व्यवहार चाहते हैं, आप कक्षा का उपयोग करते समय हर बार वर्चुअल फ़ंक्शन कॉल के लिए भुगतान क्यों करना चाहिए। बोनस के रूप में, बहुत से टेम्पलेट कोड को आसानी से सबसे बुनियादी फ़ंक्शन-कॉल ओवरहेड को खत्म करने के लिए रेखांकित किया जा सकता है।

इसके अतिरिक्त, सी ++ में टेम्पलेट बेहद शक्तिशाली और लचीले होते हैं - वे अपने स्वयं के अधिकार में एक ट्यूरींग पूर्ण भाषा दिखाए जाते हैं। ऐसी कुछ चीजें हैं जो टेम्पलेट्स के साथ आसान होती हैं जिन्हें रनटाइम पॉलीमोर्फिज्म के साथ अधिक काम की आवश्यकता होती है।

3

टेम्पलेट्स आपको एल्गोरिदम का सामान्य संस्करण करने की अनुमति देते हैं। एक कंटेनर का एक सामान्य संस्करण। अब आपको प्रकारों के बारे में चिंता करने की ज़रूरत नहीं है और जो भी आप पैदा करते हैं, उसे किसी प्रकार से बंधे रहने की आवश्यकता नहीं है। बूस्ट पुस्तकालयों का एक संग्रह है जो अपने दिन-प्रतिदिन जीवन में सी ++ का उपयोग करके विभिन्न प्रकार की लोगों की आवश्यकताओं को पूरा करने का प्रयास करता है।

संबंधित मुद्दे