Sphoorthi Dayanand
Actualmente estoy tratando de usar Google Protocol Buffers para el lenguaje C. No estoy seguro de cómo crear una unión C usando GPB.
Por ejemplo, con un archivo proto de la siguiente manera:
message msgToSend
{
required Type msg_type=1; //Type is a predefined enum to determine message type
optional ReqMsg1 msg1=2;
optional ReqMsg2 msg2=3;
}
Espero arriba para generar un union
tras la compilación, pero se genera una estructura de la siguiente manera:
struct _msgToSend
{
ProtobufCMessage base;
Type msg_type;
ReqMsg1 msg1;
ReqMsg2 msg2;
}
Quarra
En protobuf hay una estructura dedicada para eso (aunque la estoy usando en C++, no estoy seguro de si funcionará en C puro):
message MyUnion {
oneof MyUnionOneof {
bool booleanValue = 1;
string stringValue = 2;
}
}
Echa un vistazo a este enlace: https://developers.google.com/protocol-buffers/docs/proto#oneof
No creo que puedas.
En Protobuf, “opcional” no significa “es esto o esto otro” como con las uniones C; significa “esto podría estar aquí”. Es por eso que está obteniendo una estructura C que puede expresar que ambos campos opcionales están presentes.
En el trabajo, esto solo fue suficiente para que implementara un sistema de reemplazo de Protobuf, ya que realmente queríamos sindicatos.
-
¡bien! ya que finalmente solo se empaquetan los datos completos
– Sphoorthi Dayanand
14 de marzo de 2016 a las 6:56
-
tal vez comprobar developers.google.com/protocol-buffers/docs/proto#oneof para sindicatos
– Quarra
18 oct 2016 a las 8:40
-
@Quarra Ooh, no sabía nada de eso. ¿Es (muy) nuevo? Intenté resolverlo pero fallé (no sigo a Protobuf).
– relajarse
18 oct 2016 a las 8:53
-
@unwind Estoy usando protobuf 2.6.1 en este momento en mi proyecto y uno de ellos ya está allí. 2.6.1 fue lanzado el 21 de octubre de 2014 AFAIK. Oneofs están en la Guía de idiomas para proto2, así que asumo que oneofs estaban allí desde la versión 2.0.0.
– Quarra
19 oct 2016 a las 9:37
-
De acuerdo con esta respuesta, oneof se lanzó con 2.6.0, que salió 2014-08-15 stackoverflow.com/a/20985344/306
– número1
10 de febrero de 2017 a las 15:13
Considere aceptar esta respuesta que menciona
oneof
. No puedo eliminar mi respuesta aceptada.– relajarse
18 oct 2016 a las 8:56