我正在使用Boost的序列化库来保存和加载应用程序的状态。对象依赖于TCP连接。现在我在反序列化后将一个指向TCP连接的指针分配到对象中,但是跟踪在加载过程中创建的所有对象被证明是不实用的。
理想情况下,我希望能够在创建对象时将TCP连接传递给对象,可能作为构造函数参数。我可以找到关于在序列化库中使用非默认构造函数的说明,但是这些假设可以仅使用存档文件中存储的信息来构造参数本身。是否有可能以某种方式在反序列化过程中注入预先存在的对象?
答案 0 :(得分:0)
您可以加载非默认构造对象,并通过为该类定义load_construct_data
来传递任何您想要的参数。有关详细信息,请参阅this example。
答案 1 :(得分:0)
最后,我使用boost::archive::text_iarchive
作为基类创建了一个新的存档类,如下所示:
struct my_iarchive : public boost::archive::text_iarchive {
my_iarchive(std::istream& is, socket* sock) :
boost::archive::text_iarchive(is), sock(sock) {}
socket* sock;
};
然后,在反序列化方法中,我们可以通过将存档转换为my_iarchive
来获取用户数据。
template <class Archive>
void load(Archive& ar, const unsigned int version)
{
m_socket = (static_cast<my_iarchive&>(ar)).sock;
}