मैं एक ऐसा एप्लिकेशन लिखने की कोशिश कर रहा हूं जो रनटाइम के दौरान गतिशील रूप से अपने एक्सटेंशन लोड कर रहा हो। मैंने बूस्ट प्रीप्रोसेसर लाइब्रेरी का इस्तेमाल प्रीप्रोसेसर फ़ंक्शन लिखने के लिए किया था, जिसमें नामों की एक सूची दी गई थी, प्रत्येक नाम के लिए एक वर्ग घोषित करता है (और उनमें से सभी को कुछ सारप्लजिन वर्ग के उप-वर्ग बनाते हैं) और उसके बाद उस कक्षा वाले बूस्ट एमपीएल अनुक्रम की घोषणा करता है। तब मैंने एक कक्षा लिखी जो एबस्ट्रप्लगिन को पॉइंटर की कोशिश करता है अगर इसे एमपीएल अनुक्रम में किसी भी प्रकार से डाला जा सकता है। यहां समस्या यह है कि मेरे प्रीप्रोसेसर फ़ंक्शन को उन सभी एक्सटेंशन की पूरी सूची की आवश्यकता होती है जिन्हें मैं बनाना और लोड करना चाहता हूं। क्या ऐसी कोई तकनीक है जो मुझे प्रत्येक एक्सटेंशन को एक अलग फ़ाइल में पंजीकृत करने देती है?एक सी ++ कक्षा पंजीकृत करें ताकि बाद में एक फ़ंक्शन सभी पंजीकृत वर्गों पर पुन: सक्रिय हो सके
अद्यतन:
मुझे विश्वास है, स्थिति की मेरी व्याख्या बहुत अस्पष्ट था, इसलिए मैं इसे और अधिक विशिष्ट बनाने का फैसला किया।
मैं विस्तार प्रकारों का संग्रह परिभाषित करना चाहता हूं। प्रत्येक एक्सटेंशन प्रकार के लिए एक्सटेंशन की कोई भी संख्या हो सकती है। रनटाइम के दौरान प्रोग्राम बाहरी पुस्तकालय लोड करता है, एंट्री पॉइंट फ़ंक्शन को हल करता है, इसे कॉल करता है और परिणामस्वरूप, पॉइंटर प्राप्त करता है। फिर यह उस सूचक को सभी पंजीकृत एक्सटेंशन प्रकारों में डालने का प्रयास करता है (dynamic_cast
का उपयोग करके, इसलिए एक्सटेंशन प्रकारों के लिए कक्षाएं सभी पॉलिमॉर्फिक बेस क्लास से प्राप्त होती हैं)। यदि कुछ एक्सटेंशन प्रकार का कलाकार सफल होता है, तो उस एक्सटेंशन प्रकार के लिए विशेष हैंडलर को कॉल में जाली पॉइंटर का उपयोग किया जाता है।
विस्तार प्रकारों की संख्या संकलन समय पर ज्ञात है (जबकि जाहिर है, एक्सटेंशन की संख्या अनंत है)। मेरे एप्रोच का उपयोग करके लोडर क्लास इस ज्ञान का उपयोग यह जांचने के लिए करता है कि क्या प्रत्येक एक्सटेंशन प्रकार के लिए हैंडलर मौजूद है (यदि नहीं, प्रोग्राम संकलित नहीं होता है)। इसके अलावा, मेरा अपवाद विस्तार प्रकारों के लिए कक्षाओं को लोडर के बारे में कुछ भी नहीं जानता है (इसलिए लोडर को संशोधित करना आसान है)। लेकिन यदि प्रत्येक एक्सटेंशन प्रकार स्वयं पंजीकृत होता है तो यह अधिक सुविधाजनक होगा।
हेडर एक स्वीकार्य समाधान उत्पन्न कर रहा है? – Arpegius