24

我想比较两个任意google::protobuf::Message对象。

我假设对象是相等的

  • 它们的描述包含具有相同字段编号和相应字段类型的字段。
  • 它们的反射具有相同的字段集(以及相同数量的重复字段)和相等的相应字段值。

我知道,我可以自己编写这样的比较函数,但可能已经有一些简单或预定义的解决方案?

另外,我可能遗漏了一些关于此类对象不可比性的主要问题——我想知道是不是这样。

4

3 回答 3

10

您可以为此使用google::protobuf::util::MessageDifferencer。看看我的回答here

于 2015-09-02T11:32:04.013 回答
9

来自https://groups.google.com/d/msg/protobuf/5sOExQkB2eQ/ZSBNZI0K54YJ

在 C++ 中,您可以将两者序列化并比较字节。或者,您可以编写一些代码,通过反射遍历字段并比较它们。

于 2012-09-14T20:42:26.267 回答
0

我的经验告诉我,比较取决于消息结构。如果您有类似消息结构的深树,那么不要比较是否必须快速完成。

例如,我有一个 7 个节点的深度结构(不要问为什么),但对我来说,逐个字段比较是个不错的主意。

您可以使用的一个刻度是获取重复字段的大小并进行比较。但是您仍然依赖于消息结构和大小。

于 2018-07-22T13:16:56.587 回答