每一个,我都有一个关于协议缓冲区如何与现有协议机制交互的问题,请参阅下面的代码:
class PacketBase
{
public:
PacketBase();
private:
int msgType;
int msgLen;
private:
MessageBuilder* m_pMsgBuilder; /// do Write and Read From msg stream
};
class LoginRequest : public PacketBase
{
/// here we can use proto replace the msg field defined here
/// invoke write or read method in packetbase to serialze or de-serialize
};
协议缓冲区可以在保持类层次结构不变的情况下完成工作吗?
答案 0 :(得分:0)
好吧,既然你的msgType和msgLen字段都是私有的,我想你的问题归结为“我可以用一个没有args构造函数的协议缓冲区替换LoginRequest吗?”这里的答案是不合格的“是”。
协议缓冲区负责(取消)序列化字段,同时保持类型信息;你自己没有理由自己编写代码。例如,如果要创建LoginRequest protobuf,则可以构造它,调用setter来设置其字段,然后将其序列化为ostringstream。这可能足以满足您的需求,对吗?