12

पर निर्भर करता है यह परीक्षण और त्रुटि से मेरे ध्यान में लाया गया है कि प्रमाणक सी ++ 11 विशेषताएं हैं जो कुछ प्रकार के कंपाइलर जादू (टीएम) पर निर्भर करती हैं। मैं अपने मानक अनुरूप अनुरूप stdlib लागू करने के साथ चारों ओर गड़बड़ कर रहा हूँ। मुझे पता है कि stdlib के आसानी से उपलब्ध कार्यान्वयन हैं, लेकिन यह छोटे अनुप्रयोगों के लिए मेरा व्यक्तिगत संस्करण है।सी ++ 11 लाइब्रेरी फीचर्स कंपाइलर विशिष्ट प्रॉक्सी

पिछली रात मैंने spec के अनुसार std::initializer_list लागू किया था, और मुझे इसे काम करने में परेशानी हो रही थी, मैंने केवल उच्च और निम्न खोजों के लिए खोज की कि यह असंभव था, और यह कि संकलक को संशोधनों की आवश्यकता होगी । खैर मैंने वर्तमान libstdc++ कार्यान्वयन पर एक नज़र डालने का फैसला किया, और यकीन है कि मेरा कार्यान्वयन डिजाइन में बिल्कुल समान था, किनारों के चारों ओर थोड़ा अलग था, मैंने व्यर्थ समय बर्बाद कर दिया कि कार्यान्वयन क्यों काम नहीं कर रहा था, जब यह था libstdc++ में से एक के रूप में डिजाइन में बिल्कुल वही। इससे पहले कि मुझे एहसास हुआ कि यह नामस्थान std में होना था, छह घंटे तक नहीं था। कार्यान्वयन को बदलता है मैलेली को कंप्रेसर के लिए प्रॉक्सी है जो initializer_list संभव बनाता है, और संकलक कक्षा namespace std में स्वयं खोजता है।

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

धन्यवाद।

+1

शायद बहुत सारे जादू ... –

उत्तर

11

<exception> में फ़ंक्शंस अधिकतर कंपाइलर के लिए हुक होते हैं।

कई <type_traits> संपत्ति प्रश्न असंभव या संकलक सहायता के बिना लागू करने के लिए बहुत कठिन हैं। यहां तक ​​कि जो लोग केवल मुश्किल हैं, वे खराब हो सकते हैं जहां कंपाइलर का मूल stdlib "धोखाधड़ी" के कारण सफल होता है। और निश्चित रूप से वे भी तेजी से संकलित करेंगे।

हालांकि यह लिखने के लिए <iostream> ऐसे cin कि और cout पहला प्रयोग पर स्वचालित रूप से प्रारंभ कर रहे हैं संभव है, सबसे compilers धोखा और उन्हें लिंक ऐसी है कि वे पहली बार स्थिर प्रारंभ में हैं का चयन करें।

<typeinfo>, निश्चित रूप से, कंपाइलर की अपेक्षाओं से बिल्कुल मेल खाना चाहिए।

शायद ऐसी कई चीजें हैं जिन्हें मैं नहीं जानता या नहीं सोच सकता।

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

+0

हेडर फ़ाइलों में 'std :: function' कैसे काम करता है, यह जानने के बाद, मुझे संदेह है कि यह जादू भी है। –

5

सभी "जादू" प्रकार, संकलक द्वारा आवश्यक सभी , "भाषा समर्थन पुस्तकालय" नामक सी ++ विनिर्देश के अपने विशेष खंड में सूचीबद्ध हैं। जाहिर है, यदि आप सी ++ मानक लाइब्रेरी को कार्यान्वित कर रहे हैं, तो आपके पास मानक आसान की एक प्रति होना चाहिए। प्रारंभिक सूचियां उस खंड में हैं, साथ ही type_info, <cstdint>, वैश्विक ऑपरेटरों को नया/हटाएं, <exception>, और बहुत आगे।

इन्हें लागू करने की कोशिश न करें; कंपाइलर आपको क्या देता है इसका उपयोग करें।

+0

' 'उच्चतम गुणवत्ता के लिए नहीं, आत्मनिरीक्षण के साथ किया जा सकता है, और वैश्विक प्रतिस्थापन योग्य/हटाएं निजी नामस्थान और' उपयोग 'निर्देश (मैंने कोशिश नहीं की है) के साथ किया जा सकता है। लेकिन हाँ, उस खंड का अधिकांश लागू होता है। - ओह, ऐसे 'नए' को ':: ऑपरेटर नया' नाम नहीं दिया जा सका, तो आप सही हैं। – Potatoswatter

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