Re: [protobuf] Reflection of well known types in C++

2018-07-27 Thread Josh Humphries
They are well-known by their fully-qualified name, e.g.
"google.protobuf.DoubleValue". And you can get the fully-qualified names
via C++ reflection.

So you're marshaling logic woudl need to special-case the relevant message
names and subsequently can make assumptions about their structure (since
they are "well known"). As far as "auto-unboxing", keep in mind that one
significant use case for these well-known types is that they can be nil,
whereas there is obviously no analog for the unboxed primitive type (zero
is the closest, but then you cannot distinguish between whether the
original was nil or explicit zero).


*Josh Humphries*
jh...@bluegosling.com



On Fri, Jul 27, 2018 at 2:08 PM Chris Buffett 
wrote:

> I'm wondering if protobuf supports a way to determine if a type is a
> well-known type via reflection in C++? I'm working on a marshalling layer
> for a custom encoding format and I need to unbox well-known types into
> their primitive type (e.g., Double to double). I've so far been unable to
> find any information on if it's possible to definitively tell if a type is
> well known or not, other than .
>
> For example, if I have the following protobuf,
>
> message A
> {
> message B
> {
> double val = 1;
> google.protobuf.Doublevalue prev_val = 2;
> }
>
> repeated B values;
> }
>
> I need to convert into something with the following format
> class B
> {
> double val;
> double prev_val;
> }
>
> class A
> {
> list values;
> }
>
> The issue I see is that based on the protobuf format, the output would be
> ambiguous. I could also generate the following because I'm unable to tell
> whether I should unbox the type or generate a wrapping class.
>
> class B
> {
> double val;
> class C
> {
> double prev_val;
> }
> }
>
> --
> 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 protobuf+unsubscr...@googlegroups.com.
> To post to this group, send email to protobuf@googlegroups.com.
> 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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.


[protobuf] Reflection of well known types in C++

2018-07-27 Thread Chris Buffett
I'm wondering if protobuf supports a way to determine if a type is a 
well-known type via reflection in C++? I'm working on a marshalling layer 
for a custom encoding format and I need to unbox well-known types into 
their primitive type (e.g., Double to double). I've so far been unable to 
find any information on if it's possible to definitively tell if a type is 
well known or not, other than .

For example, if I have the following protobuf,

message A
{
message B
{
double val = 1;
google.protobuf.Doublevalue prev_val = 2;
}

repeated B values;
}

I need to convert into something with the following format
class B
{
double val;
double prev_val;
}

class A
{
list values;
}

The issue I see is that based on the protobuf format, the output would be 
ambiguous. I could also generate the following because I'm unable to tell 
whether I should unbox the type or generate a wrapping class.

class B
{
double val;
class C
{
double prev_val;
}
}

-- 
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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.