मैं एक पुस्तकालय लिख रहा हूं जिसमें टेम्पलेट चालबाजी और बूस्ट :: दोनों की अच्छी मात्रा शामिल है। जहाँ मैं अनिवार्य रूप से यह है कि मैं एक स्थिति हुई:बढ़ावा :: किसी भी और टेम्पलेट्स
boost::any a1, a2, a3, a4;
... और मैं एक समारोह जो इस तरह दिखता है कॉल करने की आवश्यकता:
template <typename A1, typename A2, typename A3, typename A4>
void somefunc (A1 a1, A2 a2, A3 a3, A4 a4);
मैं एक अश्लीलतापूर्वक नेस्टेड श्रृंखला का सहारा सकता है अगर बयान, लेकिन मानते हुए कि मैं 10 अलग-अलग प्रकारों को संभालने वाला हूं, तो 10,000 बयान है! बूस्ट प्रीप्रोसेसर यहां मदद कर सकता है, लेकिन यह अभी भी एक भयानक समाधान है।
क्या इस तरह की पागलपन का उपयोग किए बिना किसी बूस्ट :: की सामग्री के साथ टेम्पलेट फ़ंक्शन को कॉल करने का कोई बेहतर तरीका है? जहां तक मैं कह सकता हूं, वहां नहीं है।
केवल की 'को बढ़ावा देने के उपयोगकर्ता :: any' उदाहरण रनटाइम पर सटीक मान प्राप्त कर सकता है (एक हार्डकोडेड प्रकार की आपूर्ति), आप उस फ़ंक्शन को 'बूस्ट :: किसी भी' के भीतर मौजूद मान के साथ कॉल नहीं कर सकते क्योंकि यह प्रकार संकलित समय पर * मिटाया गया था *। आप जिस समस्या को हल करने की कोशिश कर रहे हैं वह बड़ी समस्या क्या है? 'बूस्ट :: कोई भी बहुत कम स्तर की सामग्री है। – GManNickG
सभी ऑब्जेक्ट्स को एक ऑब्जेक्ट के रूप में रखें, और उन्हें एक साथ सेट करते समय, सही 'somefunc' तात्कालिकता (जैसे 'और somefunc') के लिए एक पॉइंटर सुरक्षित करें। –
Xeo
@GManNickG बड़ी समस्या जिसे मैं हल करने की कोशिश कर रहा हूं, में एक तरफ लुआ बाइंडिंग की ऑटो-पीढ़ी शामिल है, और एक बूस्ट :: किसी भी मनमानी एसिंक्रोनस फ़ंक्शन से परिणाम धारण करता है। इस स्थिति में किसी को भी दूसरे के साथ प्रतिस्थापित नहीं किया जा सकता है। – Xtapolapocetl