C++ 如何重载序列化boost函数,使其一个用于文件存储,另一个用于tcp消息?

C++ 如何重载序列化boost函数,使其一个用于文件存储,另一个用于tcp消息?,c++,c++11,boost,C++,C++11,Boost,我有一个类,并实现了序列化函数,如(这是我用来存储在文件中并从文件反序列化的) 模板 无效序列化(存档和ar,常量未签名整数版本) { ar&id; ar&名字; ar&姓氏; 应收账款与工资; ar&用户名; //还有更多的数据 ar&data; } 除了将两个成员(不是全部,例如id、username、salary)序列化到char数组(用于通过类似tcp的消息发送)和反序列化(在客户端)之外,我还需要什么。 如何重载序列化以使一个用于文件存储,另一个用于tcp消息?您可以创建自己的存档类

我有一个类,并实现了序列化函数,如(这是我用来存储在文件中并从文件反序列化的)

模板
无效序列化(存档和ar,常量未签名整数版本)
{
ar&id;
ar&名字;
ar&姓氏;
应收账款与工资;
ar&用户名;
//还有更多的数据
ar&data;
}
除了将两个成员(不是全部,例如id、username、salary)序列化到char数组(用于通过类似tcp的消息发送)和反序列化(在客户端)之外,我还需要什么。
如何重载序列化以使一个用于文件存储,另一个用于tcp消息?

您可以创建自己的
存档
类,然后专门化类的
序列化()
函数模板:

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

template<>
void serialize(MyBriefInputArchive& ar, const unsigned int version) {
  // Alternative deserialization.
}
模板
void序列化(MyBriefOutputArchive&ar,常量unsigned int版本){
//替代序列化。
}
模板
void序列化(MyBriefInputArchive&ar,常量unsigned int版本){
//替代反序列化。
}
要创建您自己的归档类,您可以对Boost类进行子类化或复制,以使它们以相同的方式工作。要小心,因为有些归档类(如和)的标题注释表示它们不应该被子类化——您应该复制它们的实现(这很简单,因为所有工作都是在它们的超类中完成的)

如果使用一些模板元编程技巧,则可以在generic
serialize()
中识别自己的归档类,而无需专门化。在下一个版本中,这将是首选,但可能更容易首先使用专门化

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

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