Хранение экземпляров структуры в станд.:: карта

Я пытаюсь отобразить некоторые структуры на некоторые другие экземпляры, как это:

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). Действительно ли это - плохая идея?

5
задан sharvey 31 July 2010 в 14:56
поделиться