के रूप में पॉइंटर-टू-सदस्य-फ़ंक्शन पास करना तो यहां स्थिति है: मैं संयोजन के साथ सी ++, एसडीएल और जीएलकंसोल का उपयोग कर रहा हूं। मेरे पास कक्षा है, SDLGame
, जिसमें Init()
, Loop()
, Render()
आदि है - अनिवार्य रूप से, यह मेरे गेम क्लास के लिए तर्क रखता है।
जीएलकंसोल अब तक एक अच्छी लाइब्रेरी है - यह मुझे मेरे एसडीएल कक्षा के अंदर भी सीवीआर और ऐसे परिभाषित करने देता है। हालांकि, जब आदेशों को परिभाषित करने, मैं एक ConsoleFunc
है, जो के रूप मेंपॉइंटर-टू-फ़ंक्शन
typedef bool (*ConsoleFunc)(std::vector<std::string> *args);
सरल पर्याप्त typedef'd है निर्दिष्ट करना होगा। हालांकि, जैसा कि मैंने कहा, मेरे कार्य मेरी कक्षा में हैं, और मुझे पता है कि मैं पॉइंटर-टू-फ़ंक्शन तर्कों के रूप में पॉइंटर-टू-क्लास-फ़ंक्शंस पास नहीं कर सकता। मैं स्थिर कार्यों को परिभाषित नहीं कर सकता या अपनी कक्षा के बाहर कार्य नहीं कर सकता क्योंकि इनमें से कुछ कंसोलफंक्स को कक्षा डेटा सदस्यों को उपयोगी होने के लिए उपयोग करना चाहिए। मैं इसे ओओपी रखना चाहता हूं, ठीक है, ओओपी अच्छा है।
ठीक है, मुझे वास्तव में यह समस्या "हल" है - लेकिन यह बेहद बदसूरत है। मेरे पास सिर्फ SDLGame
का एक उदाहरण है जो एक बाहरी चर के रूप में घोषित किया गया है, और मेरे कंसोलफंक्स/मुख्य श्रेणी में इसका उपयोग करें।
तो, सवाल यह है: क्या ऐसा करने का कोई तरीका है जो बेवकूफ और बेवकूफ नहीं है जैसा मैं कर रहा हूं? (वैकल्पिक रूप से: क्या कोई कंसोल लाइब्रेरी है जो GLConsole है जो एसडीएल का समर्थन करता है और जो मैं वर्णन कर रहा हूं वह कर सकता हूं?)
अच्छी तरह से डांग। फिर भी धन्यवाद। उपयोग करने के लिए किसी अन्य पुस्तकालय के लिए कोई सुझाव मिला? मैं OGLConsole देख रहा था, लेकिन यह एक ही समस्या है। – Chaosed0
@user: क्षमा करें, कोई पुस्तकालय सुझाव नहीं। :/ – Xeo
मैं दृढ़ता से 'शून्य *' "उपयोगकर्ता डेटा" के उपयोग की अनुशंसा करता हूं। निश्चित रूप से, यह एक आधुनिक भाषा 'प्रतिनिधि' के रूप में सुंदर नहीं है, लेकिन यह एक सुरक्षित तरीका है क्योंकि यह आपका कोड है जो कॉलबैक और उपयोगकर्ता डेटा को एक जोड़ी के रूप में पंजीकृत करता है। इसलिए, आने वाले 'शून्य *' को उपयुक्त वर्ग प्रकार में डालने के लिए 100% सुरक्षित है क्योंकि कॉलबैक उस इरादे से दिमाग में सेट है। – TheBuzzSaw