c++ - protobuffers - ¿Cuál es la forma más sencilla de comparar dos objetos google:: protobuf:: Message entre sí?
protobuf vs json (3)
Quiero comparar dos objetos arbitrarios de google::protobuf::Message
.
Supongo que los objetos son iguales cuando
- sus descripciones contienen campos con números de campo iguales y los tipos de campo correspondientes.
- sus reflexiones tienen el mismo conjunto de campos (y el mismo número de campos repetidos) e iguales valores de campo correspondientes.
Sé que puedo escribir esa función de comparación por mi cuenta, pero es posible que ya exista alguna solución simple o predefinida.
Además, es posible que me esté perdiendo algún problema principal sobre la incomparabilidad de tales objetos; me gustaría saber si es así.
Desde https://groups.google.com/d/msg/protobuf/5sOExQkB2eQ/ZSBNZI0K54YJ :
En C ++, podría serializar los dos y comparar los bytes. Alternativamente, puede escribir algún código que itere sobre los campos a través de la reflexión y los compare.
Mi experiencia me ha demostrado que la comparación depende de la estructura del mensaje. Si tiene una estructura de mensaje similar a un árbol profundo, no la compare si tiene que terminar rápidamente.
Por ejemplo, tengo una estructura profunda de 7 nodos (no pregunte por qué) pero sería una idea de cama para que comparara campo por campo.
Una marca que puedes usar es obtener los tamaños de los campos repetidos y compararlos. Pero usted depende de la estructura y el tamaño del mensaje.
Puedes usar google::protobuf::util::MessageDifferencer para esto. Echa un vistazo a mi respuesta aquí .