You need to do it like this:
message TypeC {
optional TypeA a = 1;
optional TypeB b = 2;
}
If there are a lot of variants, you might also want to add a tag field so that you don't have to check has_*()
for each one.
This is covered in the Protobuf docs: https://developers.google.com/protocol-buffers/docs/techniques#union
PS. This missing feature of Protobufs is fixed in Cap'n Proto, a new serialization system by the same author (me): Cap'n Proto implements "unions" for this purpose. I had also implemented unions in Protobufs before leaving Google, but didn't manage to get my change merged into mainline before I left. Sorry. :(
EDIT: It looks like the Protobuf team eventually merged my change and released version 2.6.0 with it. :) See the oneof
declaration.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…