代码之家  ›  专栏  ›  技术社区  ›  vsoftco

将C枚举导入C++命名空间

  •  0
  • vsoftco  · 技术社区  · 7 年前

    我正在为C库编写C++包装器。在C库中,我有一个

    typedef enum {bar1,bar2} Foo; /* this is defined in the C library */
    

    我想把它带入C++命名空间。我在用

    namespace X{
        using ::Foo;
    }
    

    为了实现这一点。然而,为了限定enum成员的资格,我必须始终将他们称为

    X::Foo::bar1 
    

    等等是否有任何方式将“C”枚举导入到C++命名空间中,但直接引用枚举的值作为

    X::bar1 
    

    等等或者,换句话说,我可以直接将枚举的值导入名称空间吗?

    编辑

    我不认为这个问题是一个骗局,请看我的答案,因为我意识到有一个解决方案。

    1 回复  |  直到 7 年前
        1
  •  4
  •   AnT stands with Russia    7 年前

    就是这样 使用声明 作品全球的 Foo 和 bar1 是两个不同的名字。你的 使用声明 带来名字 福 进入命名空间 X ,但不从全局命名空间中引入任何其他名称(例如枚举成员的名称)。为此你需要

    namespace X {
      using ::Foo;
      using ::Foo::bar1;
      using ::Foo::bar2;
    }
    
        2
  •  1
  •   vsoftco    7 年前

    对我有效的解决方案是

    namespace X{
        extern "C"{
            #include <C_library.h>
        }
    }
    

    在尝试之前,我的印象是,我不能将C链接函数放在名称空间中,但事实证明我错了。那我就可以做了

    X::bar1
    

    要访问C枚举成员 bar1 从…起 typedef enum {bar1, bar2} Foo; .

    见例句。 extern "C" linkage inside C++ namespace?