C ++ Cereal在反序列化期间传递其他数据

时间:2018-07-19 01:12:29

标签: c++ cereal

因此,我最近开始将CEREAL库用于一个小型个人项目。但是,我遇到的问题之一是,在反序列化期间,我要反序列化的xml文件在同一目录中有其他文件,这些文件是序列化xml的依赖项。这是有问题的,因为我找不到任何向反序列化函数添加额外参数的方法。因此,基本上,当我创建带有“ some / deep / example.xml”之类的输入流时,我无法将路径传递给要反序列化的嵌套对象。现在,您可以创建一个额外的函数,在反序列化的对象加载后手动对其进行调用,但是如果您要像我这样定位重嵌套的对象,则这样做很麻烦。

所以我的问题是,没有办法执行以下操作:

{
    // load
    std::ifstream is("some/deep/path/example.xml");

    //add some user data here for example:
    UserData ud("some/deep/path/", etc...); //path is passed so other files can be loaded up in the objects that are being deserialized.
    cereal::XMLInputArchive archive(is, ud); //<- ud is passed to the deserializer

    ComplexObject co;
    //during the deserialize, make the "ud" accessible in the "archive" methods required to be implemented by Cereal
    archive(co);
}

0 个答案:

没有答案