How would you make this change without updating millions of lines of
existing C++ code that uses protobuf enums?

On Fri, Aug 20, 2010 at 11:12 AM, alopecoid <alopec...@gmail.com> wrote:

> Hi,
>
> This post is about the fact that protobuf enum values use C++ scoping
> rules, meaning that, unlike in Java, enum values are siblings of their
> type, not children of it.
>
> Say I have the following contrived message:
>
>  message MyMessage {
>    enum Foo {
>      FIRST = 0;
>      SECOND = 1;
>      BOTH = 2;
>    }
>    required Foo foo = 1;
>
>    enum Bar {
>      FIRST = 0;
>      SECOND = 1;
>      BOTH = 2;
>    }
>    required Bar bar = 2;
>  }
>
> This wouldn't compile because the protobuf compiler recognizes the
> fact that for C++, the generated enum values for Foo and Bar would
> conflict with each other.
>
> However, for Java, this wouldn't be a problem. I would like to propose
> that instead of "punishing" the generated Java code because of C++'s
> strange enum behavior (by forcing developers to rename their enum
> values even though they don't collide), that instead, the generated C+
> + enum declarations are wrapped in their own nested namespaces? For
> example, something like:
>
>  namespace Foo {
>    enum Enum {
>      FIRST = 0;
>      SECOND = 1;
>      BOTH = 2;
>    }
>  }
>
>  namespace Bar {
>    enum Enum {
>      FIRST = 0;
>      SECOND = 1;
>      BOTH = 2;
>    }
>  }
>
> At this point, the enum values would be accessed like Foo::FIRST,
> Bar::FIRST, etc, which would eliminate the enum value collision
> problem altogether, and at the same time make them appear to behave
> more like Java's enum scoping rules (which arguably make more sense).
>
> Thoughts?
>
> Thank you.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To post to this group, send email to proto...@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/protobuf?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to proto...@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to