C++ 序列化和工厂模式设计

C++ 序列化和工厂模式设计,c++,serialization,boost,factory-pattern,C++,Serialization,Boost,Factory Pattern,我已经在我正在开发的基于组件的游戏引擎框架中保护了我的构造器,以便在处理所有权分配并将其附加到游戏对象的游戏系统中创建组件。组件的受保护构造函数接受一个游戏对象&,因为它的所有者在组件的整个生命周期中始终存在 我试图通过重写load_construct_data和save_construct_data函数并使它们成为组件的朋友,将序列化应用于组件类,但最终的结果是: template<class Archive> inline void load_construct_data(Arc

我已经在我正在开发的基于组件的游戏引擎框架中保护了我的构造器,以便在处理所有权分配并将其附加到游戏对象的游戏系统中创建组件。组件的受保护构造函数接受一个游戏对象&,因为它的所有者在组件的整个生命周期中始终存在

我试图通过重写load_construct_data和save_construct_data函数并使它们成为组件的朋友,将序列化应用于组件类,但最终的结果是:

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);
}
我也可以通过GameSystem创建一个GameObject,或者让load_construct_数据成为GameObject的朋友。我不喜欢友谊的激增,但第一种选择有意义吗?序列化库是否会以某种方式跟踪对象,即使它不是通过构造函数创建的?记住,我只需要加载每个对象一次

还是需要重新设计?

我已经让GameObjects有一个公共构造函数来允许访问。如果以某种笨拙的方式解决问题