मैं एक कोकोस 2 डी-एक्स गेम लिख रहा हूं जहां खिलाड़ी, दुश्मन और अन्य पात्र CCMutableDictionary
में अपने गुणों को संग्रहीत करते हैं, जो std::map<std::string, CCObject*>
के लिए सजावटी वर्ग का कुछ हद तक है। CCMutableDictionary::objectForKey(const std::string& key)
विधि के माध्यम से शब्दकोश में एक मूल्य का उपयोग किया जा सकता है।हेडर फ़ाइल में const std :: स्ट्रिंग करने का सही तरीका?
अब, मेरी सीपीपी फ़ाइलों के कई रूप से शामिल एक हेडर फाइल में, मैं कुछ const char * const
तार शब्दकोशों में मूल्यों तक पहुँचने के लिए इस तरह मिल गया है,:
// in Constants.h
const char* const kAttributeX = "x";
const char* const kAttributeY = "y";
// in a .cpp file
CCObject* x = someDictionary->objectForKey(kAttributeX);
तो, मुझे ठीक कर लें मैं मैं गलत हूं, लेकिन std::string
की कॉपी कन्स्ट्रक्टर को बुलाया जा रहा है और एक अस्थायी std::string
हर बार objectForKey
विधियों में से एक को const char* const
का उपयोग करके कॉल करता है, ठीक है?
यदि ऐसा है, तो मुझे लगता है कि यह रनटाइम पर अधिक कुशल होगा यदि उन निरंतर विशेषता कुंजी पहले से ही std::string
ऑब्जेक्ट्स थीं। लेकिन मैं यह कैसे कर सकता हूं कि दाएं रास्ता?
Constants.h में उन्हें परिभाषित फ़ाइल निम्न तरह ठीक संकलित है, लेकिन मुझे लगता है कि कुछ सिर्फ सही नहीं है:
// in Constants.h
const std::string kAttributeX = "x";
const std::string kAttributeY = "y";
मेरे क्षमायाचना करता है, तो यह सवाल पहले से ही कहा गया है। मुझे स्टैक ओवरफ्लो पर सटीक उत्तर नहीं मिल रहा था।
तो, अगर तारों को .cpp फ़ाइल में परिभाषित किया गया है, तो वे वास्तव में तत्काल कब होते हैं? –
@NatWeiss वे सभी अन्य वैश्विक चर के साथ एक साथ तत्काल हो जाएंगे। –
क्या वेरिएबल के साथ समस्या कई बार परिभाषित होती है जब वे "कॉन्स्ट char * const" थे? मुझे यकीन है कि यह नहीं है, लेकिन मुझे समझ में नहीं आता क्यों। क्या "कॉन्स्ट char * const" को एक ही स्थान में परिभाषित करने का विशेषाधिकार देता है जिसमें इसका मूल्य शामिल है (विशेष रूप से रखरखाव के मामले में, बहुत अच्छा, आईएमओ)? – Brent212