gpt4 book ai didi

c++ - 使用 Boost 序列化时如何删除此重复代码?

转载 作者:搜寻专家 更新时间:2023-10-31 01:11:21 25 4
gpt4 key购买 nike

在我的应用程序中,我有许多我希望能够序列化的类。因此,每个实例需要可序列化的类都有以下内容:

    friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
{
// ar & (all data members)
}

为了序列化对象,我需要在类外部使用这段代码:

    ObjectToSerialize obj;
stringstream ss;
boost::archive::text_oarchive oa(ss);
oa << obj;

这第二个代码块让我很烦,因为每次我想序列化一个对象时我都必须使用它。有什么方法可以将此代码移动到一个位置并在需要序列化对象时调用它?

我可以用这个方法得到一个对象:

    string serializeObject(Serializable obj)

但这样做的问题是无法确定哪些对象是“可序列化的”,因为在添加 boost 序列化功能时没有类必须实现的父类(super class)型。

那么如何将这段代码放在一个地方,只允许将可序列化的对象传递给方法呢?

最佳答案

制作一个模板函数,该函数接受一个具有序列化函数的对象。

template <typename T> std::string serializeObject(T obj) {
stringstream ss;
boost::archive::text_oarchive oa(ss);
oa << obj;
//...
}


std:String str = serializeObject(ObjectToSerialize);

关于c++ - 使用 Boost 序列化时如何删除此重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15004716/

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