2013-11-20 5 views
1

У меня есть protected моих конструкторы в основе компонентов игрового движка скелета я работаю, так что Component s создаются в GameSystem, который обрабатывает назначение собственности и прикрепляет их к GameObject с. Защищенный конструктор Component принимает GameObject&, так как его владелец будет всегда существовать на протяжении всей жизни Component.повышение :: сериализация и завод шаблон дизайн

Я попытался применить сериализацию Component классов путем переопределения функции load_construct_data() и save_construct_data() и делает их друзьями из Component, но я бы в конечном итоге с чем-то вроде этого:

template<class Archive> 
inline void load_construct_data(Archive& ar, Component* t, const unsigned int file_version) 
{ 
     // Retrieve data from archive required to construct new instance 
     GameObject gameObject; // This is illegal since GameObject() is protected. 
     ar >> gameObject; 
     // Invoke inplace constructor to initialize instance of my_class 
     ::new(t)Component(gameObject); 
} 

Я могу создать GameObject через GameSystem а также сделать load_construct_data знакомым GameObject. Мне не нравится распространение дружеских отношений, но имеет ли смысл первый вариант? Будет ли библиотека сериализации каким-то образом отслеживать объект, даже если он не был создан через его конструктор? Помните, что мне нужно загружать каждый объект только один раз.

Или он требует крупной реорганизации?

ответ

0

У меня есть GameObject s имеют открытый конструктор, чтобы разрешить доступ. Решает проблему, если она несколько неуклюж.

Смежные вопросы