将C枚举导入C 名称空间

Importing C enum into C++ namespace

本文关键字:空间 导入 枚举      更新时间:2023-10-16

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

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

我想"将"带入C 名称空间。我正在使用

namespace X{
    using ::Foo;
}

实现这一目标。但是,要使枚举成员有资格,我总是必须将它们称为

X::Foo::bar1 

等等。是否有任何方式将C枚举"导入"到C 名称空间中,但直接将枚举值称为

X::bar1 

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

编辑

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

这就是使用声明的方式。全局Foobar1是两个不同的名称。您的使用声明将名称Foo带入命名空间X,但不会从全局名称空间中带来任何其他名称(例如枚举成员的名称)。为此,您需要

namespace X {
  using ::Foo;
  using ::Foo::bar1;
  using ::Foo::bar2;
}

对我有用的解决方案是做

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

尝试之前,我的印象是我不能将C-Linkage功能放在名称空间中,但事实证明我错了。那我可以简单地做

X::bar1

typedef enum {bar1, bar2} Foo;访问C ENUM成员bar1

参见例如外部" c&quot"C 名称空间内部的链接?