У меня есть 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
. Мне не нравится распространение дружеских отношений, но имеет ли смысл первый вариант? Будет ли библиотека сериализации каким-то образом отслеживать объект, даже если он не был создан через его конструктор? Помните, что мне нужно загружать каждый объект только один раз.
Или он требует крупной реорганизации?