gpt4 book ai didi

c++ boost::serialization为类设置固定的class_id

转载 作者:搜寻专家 更新时间:2023-10-31 00:48:00 24 4
gpt4 key购买 nike

我正在使用 boost 来序列化和反序列化一些类

像这样:

boost::archive::xml_oarchive xmlArchive(oStringStream);

xmlArchive.register_type(static_cast<BaseMessage *>(NULL));
xmlArchive.register_type(static_cast<IncomingTradeMessage *>(NULL));
xmlArchive.register_type(static_cast<InternalRequestInfo *>(NULL));
xmlArchive.register_type(static_cast<InternalTradeTransInfo *>(NULL));

const BaseMessage* myMessage =message;

xmlArchive << make_nvp("Message", myMessage);

现在我的类(class)根据使用的顺序获得一个 class_id,我不想要那个,我想控制 Class_id 的

所以我可以做类似的事情

BOOST_SET_CLASS_ID(1234, BaseMessage);

在我的项目 BaseMessage 中,所有地方的 class_id 都是 1234。

我怎么能做这样的事

最佳答案

您不能使用 BOOST_CLASS_EXPORT_GUID 或类似的代替吗?即

BOOST_CLASS_EXPORT_GUID(IncomingTradeMessage, "IncomingTradeMessage")
...

由于传输的是字符串而不是整数,因此它会使用更多的带宽,但它会解决您的问题。

引用thisthis了解更多信息。

编辑:

这个编译就好了:

#include <fstream>
#include <boost/serialization/export.hpp>
#include <boost/archive/text_oarchive.hpp>

class Foo {
friend class boost::serialization::access;

template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & dummy1;
}

int dummy1;

public:
virtual ~Foo() {}
};

class Bar : public Foo {
friend class boost::serialization::access;

template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
// serialize base class information
ar & boost::serialization::base_object<Foo>(*this);
ar & dummy2;
}

int dummy2;
};

BOOST_CLASS_EXPORT_GUID(Foo, "Foo")
BOOST_CLASS_EXPORT_GUID(Bar, "Bar")

int main(int argc, char *argv[]) {
std::ofstream ofs("filename");
boost::archive::text_oarchive oa(ofs);
Foo *f = new Bar;
oa << f;

return 0;
}

关于c++ boost::serialization为类设置固定的class_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3148794/

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