It probably wouldn’t be difficult to implement, but it’s not, afaik, a
design goal for protocol buffers because it is almost never (if ever)
necessary.
There are two composition approaches available, depending on what your
needs are. Contain the common stuff:
message Common {
required string account = 1;
required string symbol = 2;
}
message MSG1 {
required common = 1
}
message MSG2 {
required common = 1
required int32 id = 2;
}
Or contain the variable stuff:
message MSG {
required string account = 1;
required string symbol = 2;
optional Extra1 extra1 = 3;
optional Extra2 extra2 = 4;
message Extra1 {
required int32 id = 1;
}
message Extra2 {
required string foo = 1;
}
}
with proto3, you can do slightly better:
message MSG {
string account = 1;
string symbol = 2;
oneof extra { Extra1 extra1 = 3; Extra2 extra2 = 4;
}
message Extra1 {
int32 id = 1;
}
message Extra2 {
string foo = 1;
}
}
If composition is not what you want, then why not? What real-world problem
do you have that cannot be effectively solved with one of the above
strategies?
On Thursday, 20 October 2016 17:50:22 UTC+11, Saurabh Kumar wrote:
Understood but this is not what I wanted in the first place.
>
> Does someone has any idea about what makes it difficult to implement this?
> Also, is there a clever way to have the same behaviour?
> Basically, here I want to avoid copy pasting same fields over and over
> again (makes code less maintainable).
>
> Any ideas are welcome.
>
> On Thursday, October 20, 2016 at 1:33:04 AM UTC+5:30, Feng Xiao wrote:
>>
>> I meant something like:
>>
>> message Header {
>> string account = 1;
>> string symbol = 1;
>> }
>>
>> message Msg1 {
>> Header header = 1;
>> ...
>> }
>>
>> message Msg2 {
>> Header header = 1;
>> ...
>> }
>>
>> On Wed, Oct 19, 2016 at 12:42 PM, Saurabh Kumar <[email protected]>
>> wrote:
>>
>>> Thanks for the reply. What exactly do you mean by common header?
>>>
>>> On Thu, 20 Oct 2016 at 1:06 AM, Feng Xiao <[email protected]> wrote:
>>>
>>>>
>>>>
>>>> On Wed, Oct 19, 2016 at 4:03 AM, Saurabh Kumar <[email protected]>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> This question is regarding inheritance in protobuf C++ library. I will
>>>>> explain what I am looking for with a concrete example.
>>>>>
>>>>> I have this message definition:
>>>>>
>>>>> message MSG1
>>>>> {
>>>>> required string account = 0;
>>>>> required string symbol = 1;
>>>>> }
>>>>>
>>>>> Now I want to extend this message and define a new message like this:
>>>>> message MSG2
>>>>> {
>>>>> required string account = 0;
>>>>> required string symbol = 1;
>>>>> required int32 id = 2;
>>>>> }
>>>>>
>>>>> You will notice that first two fields of MSG2 are exactly same as MSG1
>>>>> (they are intended to be like that). But here I had to copy paste the
>>>>> common fields again.
>>>>> Can I do something like this?
>>>>>
>>>>> message MSG2 extends MSG1
>>>>> {
>>>>> required int32 id = 2;
>>>>> }
>>>>>
>>>>> I have already thought about using it like:
>>>>> message MSG2
>>>>> {
>>>>> required MSG1 msg1 = 0;
>>>>> required int32 id = 2;
>>>>> }
>>>>> But this is not really what I want.
>>>>>
>>>>> What's the best way to achieve this?
>>>>>
>>>> Protobuf doesn't support inheritance. Having a common header and using
>>>> composition is the best solution.
>>>>
>>>>
>>>>>
>>>>> Thanks,
>>>>> Saurabh
>>>>>
>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Protocol Buffers" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>> Visit this group at https://groups.google.com/group/protobuf.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Protocol Buffers" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at https://groups.google.com/group/protobuf.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
--
You received this message because you are subscribed to the Google Groups
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.