4

我正在使用 Boost 的序列化库来保存和加载应用程序的状态。这些对象依赖于 TCP 连接。现在我在对象被反序列化后将指向 TCP 连接的指针分发到对象中,但是跟踪在加载过程中创建的所有对象被证明是笨拙的。

理想情况下,我希望能够在创建对象时将 TCP 连接传递给对象,也许作为构造函数参数。我可以找到有关在序列化库中使用非默认构造函数的说明,但这些说明假设参数本身可以仅使用存档文件中存储的信息来构造。是否可以在反序列化过程中以某种方式注入预先存在的对象?

4

2 回答 2

1

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;
}
于 2013-05-25T20:02:26.440 回答
0

您可以加载不可默认构造的对象,并通过load_construct_data为该类定义的方式向它们传递您希望的任何参数。有关详细信息,请参阅此示例

于 2013-05-23T07:15:53.187 回答