> BOOST_SERIALIZATION_NVP(outObj); 反序列化时遇到了以下错误; 代码中是-6ren">
sách gpt4 ai đã đi

static_assert không thành công "typex::value" khi hủy tuần tự hóa dữ liệu nhị phân bằng cách sử dụng boost

In lại Tác giả: Space Dog 更新时间:2023-10-29 20:53:20 30 4
mua khóa gpt4 Nike

下面的代码对类和结构的成员进行序列化和反序列化。序列化工作正常,但我在尝试使用 oarch >> BOOST_SERIALIZATION_NVP(outObj); 反序列化时遇到了以下错误;
代码中是否存在我尚未实现和未实现的重大错误。

In file included from main.cpp:1: In file included from /usr/local/include/boost/archive/binary_oarchive.hpp:21: In file included from /usr/local/include/boost/archive/binary_oarchive_impl.hpp:22: In file included from /usr/local/include/boost/archive/basic_binary_oarchive.hpp:33: In file included from /usr/local/include/boost/archive/detail/common_oarchive.hpp:22: In file included from /usr/local/include/boost/archive/detail/interface_oarchive.hpp:23: In file included from /usr/local/include/boost/archive/detail/oserializer.hpp:68: /usr/local/include/boost/archive/detail/check.hpp:162:5: error: static_assert failed "typex::value" BOOST_STATIC_ASSERT(typex::value); ^ ~~~~~~~~~~~~ /usr/local/include/boost/static_assert.hpp:70:41: note: expanded from macro 'BOOST_STATIC_ASSERT'

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#include
#include
#include

struct values
{
std::string name;
std::string sex;
values():name("dummy"),sex("dummy"){} ;

template
void serialize(Archive & ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_NVP(name);
ar & BOOST_SERIALIZATION_NVP(sex);
}
};

class Myclass
{
công cộng:

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
void serialize(Archive & ar, const unsigned int version) const
{
ar & BOOST_SERIALIZATION_NVP(e_group);
ar & BOOST_SERIALIZATION_NVP(p_group);
}

typedef std::map groups;
typedef std::map Pgroups;
groups e_group;
Pgroups p_group;
};



int chính()
{
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);

trả về 0;
}

1 Câu trả lời

由于 Myclass::serialize 函数中的额外“const”,您的静态断言失败。它应该看起来像:

template
void serialize(Archive & ar, const unsigned int version)
{ ... }

关于 BOOST_SERIALIZATION_NVP() 用法请参阅 cái này问题。

关于c++ - 使用 boost 反序列化二进制数据时 static_assert 失败 "typex::value"失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43090624/

30 4 0
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com