c++ - 如何将非托管 C++ 中的常量公开给 C#

标签 c++ c++-cli

基本上,我需要将几个常量从非托管 C++ 公开到我的 C# 库。以下方法有效,但我认为它有异味:

在我的非托管 C++ 代码中:

class Mappings
{
public:
    static const int North = 0 ;
    static const int West = 1 ;
    static const int East = 2 ;
    static const int South = 3 ;

在我的托管 C++ 层中:

public:
    static const int North = Mappings::North ;
    static const int West = Mappings::West ;
    static const int East = Mappings::East ;
    static const int South = Mappings::South ;

有没有更简洁/更短的方法,这样我就不必将代码重复两次?

最佳答案

使用public enum class 关键字声明托管枚举类型。是的,这很丑陋,因为您无法导出 native C++ 枚举。不幸的是,你需要重复一遍。

C++11 也采用了 enum class 关键字,但它仍然与托管版本不同。这导致了 C++/CLI 中的语法歧义,因为这两种语言风格现在使用相同的关键字。编译器可以从可访问性关键字(使用publicprivate)看出区别,它对原生C++无效。

关于c++ - 如何将非托管 C++ 中的常量公开给 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8038775/

相关文章:

interop - 固定一个空数组

visual-studio-2012 - 在 VS2012 中调试混合模式 C++/CLI MFC 应用程序时如何显示 native 类型

c++ - 在 C++ 中,是否可以检测线程的意外终止?

c++ - 奇怪的优化?在 `libuv` 中。请解释

c++ - 模板类中的静态常量成员初始化

c++ - 将非托管 C++ 对象传递到托管 C++ 代码

C++ 问题中的异常

c++ - 如何检查函数中的模板参数是否匹配给定类型别名的特化

c++ - 处理 websocketpp 连接路径

c++-cli - 如何在 c++/cli 中调用基类索引器属性?