C++ 如何将boost::uuid序列化为
正在尝试序列化此简单类:C++ 如何将boost::uuid序列化为,c++,boost,boost-uuid,cereal,C++,Boost,Boost Uuid,Cereal,正在尝试序列化此简单类: class Data { public: Data(); Data(boost::uuids::uuid id); Data(const Data&) = delete; Data& operator=(const Data&) = delete; inline boost::uuids::uuid getGuid() { return guid; } template <class A
class Data
{
public:
Data();
Data(boost::uuids::uuid id);
Data(const Data&) = delete;
Data& operator=(const Data&) = delete;
inline boost::uuids::uuid getGuid() { return guid; }
template <class Archive>
void serialize(Archive & ar)
{
ar(guid);
}
private:
boost::uuids::uuid guid;
};
指向uuid。实现这一点的boost序列化方法是添加
#include <boost/uuid/uuid_serialize.hpp>
#包括
但这不适用于盒装麦片。谷物文件说
谷物档案在std::ostream或std::istream对象上运行
所以我试着在有定义的地方添加标题,但是没有运气
#include <boost/uuid/uuid_io.hpp>
#包括
事实上
谷物档案在std::ostream或std::istream对象上运行
(根本)并不意味着它使用IO流操作符(>>,这可以处理Google JSON归档文件。我在评论中还介绍了一种处理二进制归档文件的方法
#ifndef CEREAL_TYPES_BOOST_UUID_
#define CEREAL_TYPES_BOOST_UUID_
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/lexical_cast.hpp>
namespace cereal
{
template <class Archive> inline
void save(Archive& ar, boost::uuids::uuid const& uuid)
{
std::string val = boost::lexical_cast<std::string>(uuid);
ar(val);
// Other approach, probably better for binary
//ar(make_size_tag(static_cast<size_type>(uuid.size())));
//for (auto it = uuid.begin(), end = uuid.end(); it != end; ++it)
// ar(*it);
}
template <class Archive> inline
void load(Archive& ar, boost::uuids::uuid& uuid)
{
std::string val;
ar(val);
uuid = boost::lexical_cast<boost::uuids::uuid>(val);
// Other approach, probably better for binary
//size_type size;
//ar(make_size_tag(size));
//for (auto it = uuid.begin(), end = uuid.end(); it != end; ++it) {
// uint8_t val;
// ar(val);
// *it = val;
//}
}
} // namespace cereal
#endif // CEREAL_TYPES_BOOST_UUID_
\ifndef谷物类型\u BOOST\UUID_
#定义谷物类型_
#包括
#包括
#包括
名称空间谷物
{
模板内联
无效保存(归档和存档,boost::uuid::uuid const和uuid)
{
std::string val=boost::词法转换(uuid);
ar(val);
//另一种方法,可能对二进制更好
//ar(make_size_标记(静态_cast(uuid.size())));
//对于(auto-it=uuid.begin(),end=uuid.end();it!=end;++it)
//ar(*it);
}
模板内联
无效加载(归档和存档,boost::uuid::uuid和uuid)
{
std::字符串val;
ar(val);
uuid=boost::词法转换(val);
//另一种方法,可能对二进制更好
//大小\类型大小;
//ar(制造尺寸标签(尺寸));
//对于(auto-it=uuid.begin(),end=uuid.end();it!=end;++it){
//uint8_t val;
//ar(val);
//*it=val;
//}
}
}//名称空间谷物
#endif//graines\u TYPES\u BOOST\u UUID_
Boost不是谷物,所以,您应该用谷物编写Boost::uuid
的序列化。@kittikun我想知道,这个答案是不是有点糟糕(您现在已经取消投票了?)是的,很抱歉,我想答案可能没有直接回答这个问题。不管怎样,我投了你的票back@kittikun噢,谢谢。老实说,我认为你应该接受你自己的答案,因为“它解决了你的问题”,而你可以直接投票给这个(“这个答案很有用”)来代替?
#ifndef CEREAL_TYPES_BOOST_UUID_
#define CEREAL_TYPES_BOOST_UUID_
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/lexical_cast.hpp>
namespace cereal
{
template <class Archive> inline
void save(Archive& ar, boost::uuids::uuid const& uuid)
{
std::string val = boost::lexical_cast<std::string>(uuid);
ar(val);
// Other approach, probably better for binary
//ar(make_size_tag(static_cast<size_type>(uuid.size())));
//for (auto it = uuid.begin(), end = uuid.end(); it != end; ++it)
// ar(*it);
}
template <class Archive> inline
void load(Archive& ar, boost::uuids::uuid& uuid)
{
std::string val;
ar(val);
uuid = boost::lexical_cast<boost::uuids::uuid>(val);
// Other approach, probably better for binary
//size_type size;
//ar(make_size_tag(size));
//for (auto it = uuid.begin(), end = uuid.end(); it != end; ++it) {
// uint8_t val;
// ar(val);
// *it = val;
//}
}
} // namespace cereal
#endif // CEREAL_TYPES_BOOST_UUID_