2010-01-18 7 views
9

सी भाषा में देर से binding कैसे प्राप्त कर सकता है?सी भाषा में देर से बाध्यकारी कैसे प्राप्त कर सकता है?

+2

समारोह संकेत की एक सरणी का उपयोग कर के बारे में कैसे। फिर हम उपयोगकर्ता इनपुट के आधार पर सरणी से समारोह सूचक चयन कर सकते हैं – cppdev

उत्तर

8

देर बाध्यकारी वास्तव में सी भाषा का एक कार्य नहीं है, आपके निष्पादन वातावरण आपके लिए कुछ और प्रदान करता है।

कई प्रणालियों लिंकर/लोडर की एक विशेषता के रूप में बाध्यकारी टाल प्रदान करेगा और आप भी है कि पुस्तकालय तो आप के अंदर एक प्रतीक का पता पाने के लिए इस तरह के रूप dlopen (किसी साझा लाइब्रेरी खोलने के लिए) स्पष्ट कॉल का उपयोग और dlsym सकता है (इसे एक्सेस कर सकते हैं या इसे कॉल कर सकते हैं)।

सी मानक के साथ देर से बाध्यकारी होने का एकमात्र अर्द्ध पोर्टेबल तरीका system() के साथ कुछ चालबाजी का उपयोग करना होगा और यहां तक ​​कि कम से कम आंशिक रूप से कार्यान्वयन-विशिष्ट है।

यदि आप स्थगित बाध्यकारी के बजाय बात नहीं कर रहे हैं लेकिन इसके बजाय बहुरूपता, तो आप फ़ंक्शन पॉइंटर्स के साथ उस प्रभाव को प्राप्त कर सकते हैं। असल में, आप struct बनाते हैं जिसमें उस प्रकार के तरीकों का पता लगाने के लिए फ़ंक्शन पॉइंटर्स के साथ एक प्रकार के सभी डेटा होते हैं। फिर, "कन्स्ट्रक्टर" (आमतौर पर init() फ़ंक्शन) में, आप फ़ंक्शन पॉइंटर्स को उस प्रकार के प्रासंगिक कार्यों में सेट करते हैं।

आपको अभी भी सभी कोड शामिल करने की आवश्यकता है, भले ही आप इसका उपयोग न करें, लेकिन इस तरह बहुरूपता प्राप्त करने के लिए संभव है।

1

सी भाषा में देर से बाध्यकारी कैसे प्राप्त कर सकता है?

निकटतम ऐसे dlopen & dlsym लिनक्स पर साथ के रूप में पुस्तकालय (DLL) के गतिशील लोड हो रहा है के माध्यम से किया जाएगा। अन्यथा, यह सीधे C में उपलब्ध नहीं है।

3

सी में प्रतीक बाध्यकारी हमेशा संकलन समय पर किया जाता है, कभी रनटाइम नहीं होता है।

लाइब्रेरी बंधन, या गतिशील जोड़ने के रूप में यह कहा जाता है, dlopen() और dlsym() * nix पर, और LoadLibrary() और GetProcAddress() विंडोज पर के माध्यम से किया जाता है।

1

उद्देश्य-सी या लुआ का उपयोग करें। दोनों देर से बाध्य भाषाएं हैं जो सी

के साथ आसानी से इंटरफ़ेस कर सकती हैं बेशक आप अपना नाम संकल्प योजना लागू कर सकते हैं, लेकिन पहिया का फिर से आविष्कार क्यों कर सकते हैं?

1

दुर्भाग्यवश आपने ओएस निर्दिष्ट नहीं किया था। यूनिक्स के लिए आप साझा पुस्तकालयों का उपयोग कर सकते हैं, या कॉन्फ़िगर करने योग्य (प्लगइन) मॉड्यूल संरचना बना सकते हैं। विवरण के लिए आपको एक अपाचे 1.3 वेबसर्वर उपयोगी स्रोत कोड मिल सकता है। http://httpd.apache.org/download.cgi

0

cppdev एक और केवल अपनी टिप्पणी के साथ स्पॉट को मारने के लिए प्रतीत होता है। कृपया, the definition itself पर एक नज़र डालें। कुछ शब्दों में:

लेट बाइंडिंग, या गतिशील बंधन, एक कंप्यूटर प्रोग्रामिंग तंत्र जिसमें विधि पर एक वस्तु कार्यावधि में नाम द्वारा देखा जाता है बुलाया जा रहा है।

अन्य सभी उत्तरों सिर्फ मुख्य बिंदु को याद करते हैं, जो "नाम से दिखते हैं"।

जरूरत समाधान नाम से सही एक (या यहां तक ​​कि हस्ताक्षर के जरिए) का चयन करने के लिए एक या दो समारोह के साथ कार्यों के लिए संकेत की एक लुकअप तालिका करने के लिए बहुत समान होगा। हम इसे एक "हैश तालिका" कहते हैं।

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