是否可以在C ++和C#之间共享“枚举类”?

时间:2019-07-01 10:54:04

标签: c# c++

我提到的是上一个问题:Is it possible to share an enum declaration between C# and unmanaged C++?

我想做类似的事情,但对于枚举类而不是枚举:

C ++代码:

enum class MyEnum { ONE, TWO, THREE, ... }

C#代码:

public enum {ONE, TWO, THREE, ...}

是否有一些预处理器可以做到这一点?我似乎无法在代码的C#部分中删除“ class”关键字。

例如:在MyEnum.cs

#if __LINE__        // if C++
#define public      // C++ code: removes public keyword for C++
#else
#define class       // does not work: unable to remove the class keyword for C#
#endif



enum class MyEnum { ONE, TWO, THREE, ... }


#if __LINE__
#undef public // ok: remove public = nothing definition in C++
#else
#undef class // does not work: #undef must be at the top of the file in C#
#endif

1 个答案:

答案 0 :(得分:2)

与C预处理程序相比,C#预处理程序的局限性更大。您可以在源文件中保留C#语法,并使用C预处理程序技巧使其成为有效的C ++代码。像这样:

// enum.cs
public enum MyEnum : int { ONE, TWO, THREE };

要在C ++中使用:

// enum-cpp.h
#define public
#define enum enum struct

#include "enum.cs"

#undef enum
#undef public