real-logic / simple-binary-encoding

Simple Binary Encoding (SBE) - High Performance Message Codec
Apache License 2.0
3.12k stars 523 forks source link

Typed enumerations for C++ #690

Open manuka89 opened 5 years ago

manuka89 commented 5 years ago

When generating enumerations for C++, is it possible to generate typed enumerations?

I mean to generate:

enum Color : uint8_t { BLUE = 0, GREEN = 1, ... }

instead of

enum Color { BLUE = (std::uint8_t)0, GREEN = (std::uint8_t)1, ... }

tmontgomery commented 5 years ago

Sure. Send a PR and I will look at it.

manuka89 commented 5 years ago

You mean PR=Pull Request?

tmontgomery commented 5 years ago

Yes

rigtorp commented 5 years ago

@tmontgomery Does this project require C++11 or higher? Because that is needed for enum classes.

If we do require C++11 or higher we could remove the SBE_NOEXCEPT and SBE_CONSTEXPR macro.

tmontgomery commented 5 years ago

Not all C++11 compilers are equal. Such as various older releases of Visual Studio (right after 11 started showing up) and gcc that don't fully support every piece of the standard.

So, while C++11 is suggested, we try to make it as optional as possible to have the broadest base.

rigtorp commented 5 years ago

Sure, that's why it's better to target some common platforms (Ubuntu LTS, Centos, SUSE, whatever is common non-EOL VS) and run CI against them. I'm pretty sure all of them have compilers with enum class support.

Using enum class could improve type safety in the C++ API. It would also be a API breakage.Something to consider for the future.

I will create a separate issue for this.