static_assert 在使用 boost 反序列化二进制数据时失败"typex::value"失败
static_assert failed "typex::value" failure while deserialising binary data using boost
下面的代码序列化和反序列化类和结构的成员。 序列化正在工作,但我在尝试使用oarch >> BOOST_SERIALIZATION_NVP(outObj);
反序列化它时遇到了以下错误 代码中是否有任何我没有重新别名且未实现的大遗漏.
在 main.cpp:1 中包含的文件中: 在/usr/local/include/boost/archive/binary_oarchive.hpp:21 包含的文件中: 在/usr/local/include/boost/archive/binary_oarchive_impl.hpp:22 包含的文件中: 在/usr/local/include/boost/archive/basic_binary_oarchive.hpp:33 包含的文件中: 在/usr/local/include/boost/archive/detail/common_oarchive.hpp:22 包含的文件中: 在/usr/local/include/boost/archive/detail/interface_oarchive.hpp:23 包含的文件中: 在/usr/local/include/boost/archive/detail/oserializer.hpp:68 包含的文件中:/usr/local/include/boost/archive/detail/check.hpp:162:5:错误:static_assert失败的"typex::value" BOOST_STATIC_ASSERT(typex::value); ^ ~~~~~~~~~~~~/usr/local/include/boost/static_assert.hpp:70:41:注意:从宏"BOOST_STATIC_ASSERT"扩展
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/binary_object.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/nvp.hpp>
#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>
#include <fstream>
#include <map>
#include <boost/serialization/map.hpp>
#include <boost/serialization/split_member.hpp>
struct values
{
std::string name;
std::string sex;
values():name("dummy"),sex("dummy"){} ;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_NVP(name);
ar & BOOST_SERIALIZATION_NVP(sex);
}
};
class Myclass
{
public:
Myclass()
{
values val1;
e_group.insert( std::make_pair(1,val1) ) ;
e_group.insert( std::make_pair(2,val1) ) ;
p_group.insert( std::make_pair(1,e_group) ) ;
p_group.insert( std::make_pair(2,e_group) ) ;
}
template<class Archive>
void serialize(Archive & ar, const unsigned int version) const
{
ar & BOOST_SERIALIZATION_NVP(e_group);
ar & BOOST_SERIALIZATION_NVP(p_group);
}
typedef std::map<int,values> groups;
typedef std::map<int,groups> Pgroups;
groups e_group;
Pgroups p_group;
};
int main()
{
Myclass assetlist;
auto os = std::ostringstream(std::ios::binary);
boost::archive::binary_oarchive arch( os, boost::archive::no_header);
arch << BOOST_SERIALIZATION_NVP(assetlist);
std::string s1 = os.str();
std::stringstream is( s1, std::ios_base::binary| std::ios_base::out| std::ios_base::in);
Myclass outObj;
boost::archive::binary_iarchive iarch (is , boost::archive::no_header );
iarch >> BOOST_SERIALIZATION_NVP(outObj);
return 0;
}
你的静态断言失败了,因为Myclass::serialize函数中额外的"const"。 它应如下所示:
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{ ... }
关于BOOST_SERIALIZATION_NVP()的用法,请参阅此问题。
- PyTorch C++将数据转换为张量失败
- HDF5 简单读取数据集失败
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 创建服务失败0x6f7存根收到错误数据
- 元数据操作失败LNK2022错误 (8013118D):重复类型中的布局信息不一致 (选择设备参数):(0x020002
- 获取剪贴板数据(CF_HDROP)在剪切和粘贴中失败
- static_assert 在使用 boost 反序列化二进制数据时失败"typex::value"失败
- 如何防止ptr_map在插入失败时释放数据
- 从文件中提取的数据中的C 搜索字符串失败
- Qt命令行编译在链接器阶段失败,出现垃圾NXCOMPAT数据
- 为什么返回的 FILE* 在 popen() 中的命令失败时保留数据
- 为什么添加静态数据成员会导致链接器失败
- MFC对话框数据验证失败时还原数据
- libcurl错误失败的写作已接收到磁盘/应用程序的数据
- 当我更改着色器中与这些统一无关的代码行时,向着色器(GLSL)发送数据失败
- XLL由XLW制造,BOOST UBLAS MyMatrix数据类型转换为双**失败
- openGL-testure映射多维数据集失败
- 为什么ifstream在读取混合数据时失败
- 如果保存数据,libz 压缩将失败
- 尽管数据与预期值匹配,但compare_exchange_strong失败