24

google::protobuf::Message2つの任意のオブジェクトを比較したいと思います。

オブジェクトは次の場合に等しいと思います

  • それらの説明には、同じフィールド番号と対応するフィールドタイプのフィールドが含まれています。
  • それらの反射には、同じフィールドのセット(および同じ数の繰り返しフィールド)があり、対応するフィールド値が等しくなります。

私はそのような比較関数を自分で書くことができることを知っていますが、すでにいくつかの単純なまたは事前定義された解決策があるかもしれませんか?

また、そのようなオブジェクトの非比較性に関するいくつかの主要な問題が欠落している可能性があります-そうであるかどうかを知りたいです。

4

3 に答える 3

10

これには、 google :: protobuf :: util::MessageDifferencerを使用できます。ここで私の答えを見てください。

于 2015-09-02T11:32:04.013 に答える
9

https://groups.google.com/d/msg/protobuf/5sOExQkB2eQ/ZSBNZI0K54YJから:

C ++では、2つをシリアル化して、バイトを比較できます。または、リフレクションを介してフィールドを反復処理し、それらを比較するコードを作成することもできます。

于 2012-09-14T20:42:26.267 に答える
0

私の経験では、比較はメッセージ構造に依存することがわかりました。メッセージ構造のような深いツリーがある場合は、すぐに終了する必要があるかどうかを比較しないでください。

たとえば、私は7ノードの深層構造を持っています(理由は聞かないでください)が、フィールドごとに比較することは私にとってベッドのアイデアです。

使用できる目盛りの1つは、繰り返されるフィールドのサイズを取得して比較することです。しかし、あなたはメッセージの構造とサイズに依存しています。

于 2018-07-22T13:16:56.587 に答える