मैं, कुछ अन्य उदाहरण के लिए कुछ structs मैप करने के लिए कोशिश कर रहा हूँ इस तरह:भंडारण struct उदाहरणों :: नक्शा
template <typename T>
class Component {
public:
typedef std::map<EntityID, T> instances_map;
instances_map instances;
Component() {};
T add(EntityID id) {
T* t = new T();
instances[id] = *t;
return *t;
};
};
तब मैं इसका उपयोग इस प्रकार
:
struct UnitInfos {
int owner_id;
int health;
float x, y;
};
class LogicComponent : public Component<UnitInfos> {};
comp.instance[id];
मैं मूलभूत मूल्यों पर प्रारंभ गुणों के साथ एक breand नई वस्तु मिलती है: समस्या यह है कि जब यह बाद में डेटा पर बाद में, इस तरह पुनः प्राप्त है।
क्या कोड के इस टुकड़े के साथ कुछ स्वाभाविक रूप से गलत है, या क्या मैं समस्या के बारे में जानकारी छोड़ रहा हूं?
@aaa सुझाव के अनुसार, मैं
typedef std::map<EntityID, T> instances_map;
instances_map instances;
T& add(EntityID id) {
instances[id] = T();
return instances[id];
};
लिए कोड बदलने लेकिन जब मैं का उपयोग यह
UnitInfos &info = logic_c.instances[id];
info.x का मूल्य अभी भी 0. किसी भी संकेत दिए गए है?
समस्या यह थी कि मैंने किसी अन्य वर्ग में LogicComponent के संदर्भ को कैसे संग्रहीत किया। LogicComponent& logic_c;
के बजाय LogicComponent logic_c;
का उपयोग करना। यह अब काम करता है, लेकिन मैं मानचित्र में पॉइंटर्स संग्रहीत कर रहा हूं (@ aaa के सुझाव के बजाय)। क्या यह एक बुरा विचार है?
वहाँ कुछ कोड के इस टुकड़े के साथ स्वाभाविक गलत _is_: गतिशील रूप से 'T' निर्माण नहीं करतीं। ऐसा करने का कोई कारण नहीं है, और जैसा कि अब लिखा गया है, आप उस वस्तु को रिसाव करते हैं। जिस समस्या के लिए आप देख रहे हैं, आपको 'EntityID' के लिए ऑपरेटर कार्यान्वयन से कम पोस्ट करना होगा और आप मानचित्र पर' ऑपरेटर [] 'को कैसे कॉल कर रहे हैं (यानी, आप जिस आईडी को पास करते हैं उसे कैसे बनाते हैं' ऑपरेटर [] '?)। –
EntityID को अभी टाइप किया गया है 'टाइपपीफ हस्ताक्षरित लंबी EntityID;'। – sharvey