我在我正在处理的基于组件的游戏引擎框架中有protected
我的构造函数,因此在Component
中创建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 :(得分:0)
我让GameObject
有一个允许访问的公共构造函数。如果以一种有点笨重的方式解决问题。