Ami*_*iga 29
你可以使用google :: protobuf :: util :: MessageDifferencer这个类.我认为它仅在v3.0.2之后可用:
在google/protobuf/util目录中引入了新的实用程序函数/类:
- MessageDifferencer:比较两个原型消息并报告它们的差异.
MessageDifferencer::Equals(msg1, msg2);
而不是使用message.DebugString你也可以做
std::string strMsg;
message.SerializeToString(&strMsg);
Run Code Online (Sandbox Code Playgroud)
用两个消息然后比较两个(二进制)字符串.我没有测试性能,但我认为它比比较.DebugString()返回的人类可读消息字符串更快.+您可以使用protobuf-lite库(对于message.DebugString,您需要完整版本).
您可以依赖于所有protobuf消息都继承自该google::protobuf::MesageLite类型的事实,而这种消息又包含了比较任何两个protobuf消息所需的一切,无论它们是否是相同的派生类型:
bool operator==(const google::protobuf::MessageLite& msg_a,
const google::protobuf::MessageLite& msg_b) {
return (msg_a.GetTypeName() == msg_b.GetTypeName()) &&
(msg_a.SerializeAsString() == msg_b.SerializeAsString());
}
Run Code Online (Sandbox Code Playgroud)
Gia*_*nni -1
这可能不是理想的解决方案,但我认为可以通过以下方式来完成:
messageA.DebugString() == messageB.DebugString();
Run Code Online (Sandbox Code Playgroud)
除此之外,我认为唯一的解决方案是创建您自己的Message子类并实现bool operator==(const Message&).