gpt4 book ai didi

c++ - 我怎样才能重载序列化 boost 功能,让一个用于文件存储,另一个用于 tcp 消息?

转载 作者:行者123 更新时间:2023-11-30 04:05:10 25 4
gpt4 key购买 nike

我有类(class)并且我已经实现了序列化功能(这是我用来存储文件和从文件反序列化的功能)

    template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & id;
ar & first_name;
ar & last_name;
ar & salary;
ar & username;
// and lot of more data
ar & data;
}

除了将成员(不是全部,例如 id、用户名、薪水)序列化为 char 数组(用于通过 tcp 发送类似消息)并反序列化(在客户端)之外,我还需要什么。我如何重载序列化以让一个用于文件存储而另一个用于 tcp 消息?

最佳答案

您可以创建自己的Archive 类,然后为您的类专门化serialize() 函数模板:

template<>
void serialize(MyBriefOutputArchive& ar, const unsigned int version) {
// Alternative serialization.
}

template<>
void serialize(MyBriefInputArchive& ar, const unsigned int version) {
// Alternative deserialization.
}

要制作您自己的存档类,您可以子类化或复制 Boost 类,以便它们在其他方面的工作方式相同。要小心,因为一些归档类,比如 boost::binary_oarchiveboost::binary_iarchive , 有标题注释说它们不应该被子类化——你应该复制它们的实现(这很简单,因为所有的工作都在它们的父类(super class)中完成)。

如果您使用一些模板元编程技巧,您可以在通用 serialize() 中识别您自己的存档类,而无需专门化。这在 DRY principle 下是首选,但首先使用特化可能更容易。

关于c++ - 我怎样才能重载序列化 boost 功能,让一个用于文件存储,另一个用于 tcp 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23417630/

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