我試圖映射一些結構的一些其他情況下,像這樣:存儲結構實例::地圖
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」的小於運算符的實現以及你如何在地圖上調用operator []'(例如,你如何創建你傳遞給'運算符[]'?)。 – 2010-07-31 02:26:06
EntityID被定義爲'typedef unsigned long EntityID;'。 – sharvey 2010-07-31 02:30:42