c++ - Template specialization with float as non type -


राज्यों की धारा 4.3 "फ्लोटिंग-पॉइंट लीटरल्स (और सरल निरंतर फ़्लोटिंग-पॉइंट एक्सप्रेशन) का उपयोग करने में सक्षम नहीं है जैसा कि टेम्पलेट तर्कों के लिए ऐतिहासिक कारण हैं। '

इसी प्रकार,

$ 14.1 / 7 राज्य - "एक गैर-प्रकार वाला टेम्प्लेट-पैरामीटर घोषित नहीं किया जाएगा फ्लोटिंग प्वाइंट, क्लास या रिक्त प्रकार। [उदाहरण:

  टेम्पलेट & lt; double d & gt; class X; // त्रुटि टेम्प्लेट & lt; double * pd & gt; class Y; // ok टेम्पलेट & lt ; डबल एंड amp; आरडी & gt; कक्षा जेड; // ओक " 
  1. उपरोक्त उद्धरण में पुस्तक के बारे में क्या बात की जा रही है?

  2. वाई और जेड मान्य हैं, लेकिन एक्स नहीं है, यह देखते हुए कि पूरी तरह से फ्लोटिंग प्रकार के गैर-प्रकार के टेम्प्लेट पैरामीटर वाले पॉइंटर्स / रेफरेंस के साथ कुछ भी करने के लिए संबंधित चुनौती है?

  3. क्यों टेम्पलेट गैर प्रकार पैरामीटर कक्षा प्रकार की नहीं हो सकता?

संभव गोलऑफ त्रुटियों की वजह से, सही टेम्पलेट इंस्टिटिशन चुनना मुश्किल हो सकता है

निम्नलिखित पर विचार करें:

  टेम्पलेट & lt; float n & gt; शून्य एफ (एन) {...} // संस्करण 1 टेम्पलेट & lt; 0.3333 & gt; शून्य एफ () {...} // संस्करण 2: 0.3333 के लिए विशेषज्ञता  

f (1/3); -> किस संस्करण को बुलाया जाएगा?

निम्नलिखित कोड पर विचार करें:

  टेम्पलेट & lt; float f & gt; वर्ग foo {...}; Foo & lt; 1E6 + 1 ई-6 & gt; my_foo; "कंपाइलर को क्या करना चाहिए" संकलक को टेम्पलेट को तत्काल चलाने में सक्षम होने के लिए लक्ष्य फ़्लोटिंग-पॉइंट आर्किटेक्चर के विवरण के बारे में जानना होगा। यह बहुत आसान है अगर संकलक चल रहा है लक्ष्य आर्किटेक्चर पर, यह गणना कर सकता है और इसका उत्तर पता लगा सकता है, लेकिन यदि आप क्रॉस-कंपाइल कर रहे हैं, तो संकलक प्रत्येक इच्छित लक्ष्य आर्किटेक्चर के फ्लोटिंग प्वाइंट व्यवहार को संश्लेषित करने में सक्षम होगा। और शुक्रिया मानक समिति ने फैसला किया कि यह अनुचित होगा। " 

शर्तियां से कॉपी की

क्यों टेम्पलेट गैर प्रकार पैरामीटर वर्ग प्रकार का नहीं हो सकता < / Blockquote>

मेरी समझ के अनुसार एक गैर-प्रकार पैरामीटर क्लास प्रकार का नहीं हो सकता क्योंकि कोई क्लास के एक से अधिक कार्यान्वयन हो सकता है उदाहरण के लिए

  टेम्पलेट & lt; typename T & gt; क्लास डेमो {...}; टेम्पलेट & lt; & gt; क्लास डेमो & lt; int & gt; {...}; टेम्पलेट & lt; typename टी, डेमो डी & gt; // जो डेमो ?? डेमो के & lt; टी & gt; या डेमो & lt; int & gt; कक्षा उदाहरण {...};  

स्थानीय वर्गों को टेम्प्लेट पैरामीटर के रूप में उपयोग नहीं किया जा सकता क्योंकि


Comments