boost ::序列化和工厂模式设计

时间:2013-11-20 09:04:17

标签: c++ serialization boost factory-pattern

我在我正在处理的基于组件的游戏引擎框架中有protected我的构造函数,因此在Component中创建GameSystem来处理所有权分配并附加它们至GameObjectComponent的受保护构造函数需要GameObject&,因为它的所有者将始终存在于Component的整个生命周期中。

我尝试通过覆盖Componentload_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);
}

我也可以创建GameObjectGameSystem,或者让load_construct_data成为GameObject的朋友。我不喜欢友谊的扩散,但第一种选择是否有意义?序列化库是否会以某种方式跟踪对象,即使它不是通过构造函数创建的?请记住,我只需要加载每个对象一次。

还是要求进行重大的重新设计?

1 个答案:

答案 0 :(得分:0)

我让GameObject有一个允许访问的公共构造函数。如果以一种有点笨重的方式解决问题。