Я пытаюсь отобразить некоторые структуры на некоторые другие экземпляры, как это:
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). Действительно ли это - плохая идея?