我提到的是上一个问题: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
答案 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