How to implement monkey patch in C++? -
क्या सी ++ में बंदर पैचिंग लागू करना संभव है?
धन्यवाद।
पोर्टेबल नहीं तो, और बड़ी परियोजनाओं के खतरों की वजह से आपके पास बेहतर कारण हो सकता है।
प्रीप्रोसेसर संभवतः सबसे अच्छा उम्मीदवार है, इसकी वजह से भाषा की अज्ञानता ही है यह विशेषताओं, विधियों और अन्य प्रतीक नामों का नाम बदलने के लिए इस्तेमाल किया जा सकता है - लेकिन प्रतिस्थापन कम से कम एक एकल #include या कोड के अनुक्रम के लिए वैश्विक है
मैंने "लायब्रेरी हीरे" को जमा करने में पहले प्रयोग किया है - लाइब्रेरी ए और बी दोनों एक ओएस पुस्तकालय एस आयात करते हैं, लेकिन अलग-अलग तरीकों से एस के कुछ चिन्हों को समान रूप से नामित किया जाता है लेकिन अलग-अलग। (नामस्थान सवाल से बाहर थे, क्योंकि उनके पास बहुत अधिक दूरगामी परिणाम होंगे)।
समानांतर, आप संगत-लेकिन-श्रेष्ठ वर्गों के साथ प्रतीक नामों को बदल सकते हैं। जैसे वीसी में, #import
टाइप एडेप्टर के रूप में _bstr_t
का उपयोग करने वाली एक आयात लाइब्रेरी बनाता है एक परियोजना में मैंने सफलतापूर्वक इन _bstr_t को एक संगत-पर्याप्त वर्ग के साथ उपयोग किया है जो अन्य कोड के साथ बेहतर ढंग से संचालित होता है, बस मेरे कोड के लिए #define
आईएनजी _bstr_t
#import
आभासी विधि तालिका पट्टी करना - या तो पूरे VMT या अलग-अलग तरीकों को बदलकर - मैं किसी और चीज़ के पास आ चुका हूं इसके बारे में अच्छी समझ की आवश्यकता है कि आपका कंपाइलर वीएमटी कैसे लागू करता है। मैं एक वास्तविक जीवन प्रोजेक्ट में ऐसा नहीं करूँगा, क्योंकि यह कंपाइलर इंटरनल पर डिप्ब्सिंग करता है, और जब आपके पासवर्ड बदलते हैं तो आपको कोई चेतावनी नहीं मिलती। हालांकि, सी ++ के कार्यान्वयन के विवरण के बारे में जानने के लिए यह मज़ेदार अभ्यास है एक आवेदन रनटाइम पर एक प्रारंभिक / लोडर स्टब से एक पूर्ण - या यहां तक कि डेटा-आश्रित-कार्यान्वयन में स्विच कर रहा होगा।
उड़ान पर कोड उत्पन्न करना कुछ परिदृश्यों में सामान्य है, जैसे कि COM इंटरफ़ेस कॉल या मैपिंग ओएस विंडो लाइब्रेरी ऑब्जेक्ट्स को संभालता है। मुझे यकीन नहीं है कि यह अभी भी "बंदर-पैचिंग" है, क्योंकि यह वास्तव में भाषा के साथ नहीं है।
Comments
Post a Comment