के लिए बहस मैं ऐसी है कि वह बाद में कहा जा सकता है इस समस्या को जहां एक सी ++ समारोह सूचक सहेजा जाता है तर्क का एक सेट के साथ एक साथ, उस पर कॉल करने के लिए है। कॉलिंग कोड कार्यों के प्रकार और तर्क से अनजान है। फ़ंक्शन पॉइंटर्स और तर्कों को सहेजना और कॉल करना मेरे आवेदन में बेहद महत्वपूर्ण है। इंटरफेस कुछ इस तरह दिखना चाहिए:की बचत समारोह सूचक + बाद में उपयोग के
void func(int a, char * b);
call_this_later(func, 5, "abc");
एक सरल समाधान बुलाया समारोह प्रति एक अलग typedef की आवश्यकता होती है एक functor में इस जानकारी के सभी डाल करने के लिए, है। सी ++ 11 मुझे एक वैरिएडिक टेम्पलेट का उपयोग करने की अनुमति देगा, तो यह ठीक है।
के बाद से functor के प्रकार के कॉल के बिंदु पर ज्ञात नहीं है, यह इन functors के लिए एक आभासी आधार वर्ग बनाने के लिए और आभासी समारोह कॉल का उपयोग functors आह्वान करने के लिए आवश्यक है। वर्चुअल फ़ंक्शन कॉल का प्रदर्शन ओवरहेड + हीप आवंटन बहुत अधिक है (मैं इस मुहावरे को यथासंभव कुछ असेंबली निर्देशों के साथ लागू करने की सीमाओं को दबा रहा हूं)। तो मुझे एक अलग समाधान की जरूरत है।
कोई विचार?
मेरा मानना है कि ':: boost :: function' और ':: std :: tr1 :: function' वही करता है जो @ हंस नहीं करना चाहता। मुझे लगता है कि वे आभासी कार्यों और गतिशील आवंटन का उपयोग करते हैं। – Omnifarious
@ ओमनिफरीस: किसी भी गतिशील आवंटन के लिए उपयोग किए जाने वाले फ़ंक्शन/मज़ेदार पर निर्भर करता है। पीओडी प्रकारों की छोटी संख्या वाले कार्यों के लिए, आंतरिक भंडारण होता है जो इसका उपयोग करेगा, हालांकि, हां यह वास्तव में फ़ंक्शन कॉल करने के लिए एक प्रकार की (बहुत गहराई से) छुपी वर्चुअल तालिका का उपयोग करता है। – diverscuba23