Share via


Sharing enums across C# and C++

On an internal DL someone asked a question about how folks share enums between C++ and C# code when required (e.g. common error codes for a large project that use both native code and C#).

There was a very interesting answer given by one person. He simply asked why don't you define it in a .cs file and #include that file in your C++ code. I initially thought what the hell is he talking about and then it struck me that C++ and C# is not just similar but in some context they are exactly the same. Consider the following enum definition in a .cs files

 // File Enum.cs
namespace EnumShare
{
    enum MyEnum
    {
        a = 1,
        b = 2,
        c = 3,
    };
}

This can be simply included in a C# project to be built normally. However, it can also be pulled into C++ code as follows

 #include "..\EnumShare\Enum.cs"

using namespace EnumShare;

int Foo()
{
    cout << a << endl;

}

Note that I could directly pull in the C# code because the syntax matches that of C++ :)

I thought that this was a rather interesting usage.