gpt4 book ai didi

c++ - Boost不同版本的序列化处理

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:08 24 4
gpt4 key购买 nike

我正在使用 boost 进行序列化:

bool saveParams(std::string filename)
{
using boost::serialization::make_nvp;
std::ofstream ofs(filename.c_str());
if(ofs.is_open() == false) return false;
boost::archive::xml_oarchive xml(ofs);

xml << make_nvp("Param1", param1value);
xml << make_nvp("Param2", param2value);
xml << make_nvp("Param3", param3value);
xml << make_nvp("Param4", param4value);
}

加载完成:

bool loadParams(std::string filename)
{
using boost::serialization::make_nvp;
std::ifstream ifs(filename.c_str());
if(ifs.is_open() == false) return false;
boost::archive::xml_iarchive xml(ifs);

xml >> BOOST_SERIALIZATION_NVP(param1value);
xml >> BOOST_SERIALIZATION_NVP(param2value);
xml >> BOOST_SERIALIZATION_NVP(param3value);
xml >> BOOST_SERIALIZATION_NVP(param4value);
}

现在我想添加Param5。 如何添加附加版本信息并在加载时处理它?<​​/strong>我在文档中找到了当使用 BOOST_CLASS_VERSION(serialized_class, version) 序列化类时如何执行此操作。

最佳答案

所以我将提出我丑陋的解决方案作为答案。当更好的解决方案出现时,我会接受它。

我已经处理了有异常(exception)的版本:

bool loadParams(std::string filename)
{
using boost::serialization::make_nvp;
std::ifstream ifs(filename.c_str());
if(ifs.is_open() == false) return false;
boost::archive::xml_iarchive xml(ifs);

try
{
xml >> BOOST_SERIALIZATION_NVP(param1value);
xml >> BOOST_SERIALIZATION_NVP(param2value);
xml >> BOOST_SERIALIZATION_NVP(param3value);
xml >> BOOST_SERIALIZATION_NVP(param4value);
}
catch(boost::archive::archive_exception e)
{
qDebug()<<"Exception: "<<e.what();
}
try
{
xml >> BOOST_SERIALIZATION_NVP(newParam);
}
catch(boost::archive::archive_exception e)
{
qDebug()<<"New version!";
}
}

关于c++ - Boost不同版本的序列化处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14809576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com