我正在为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
等等?或者换句话说,我可以直接将枚举的值导入名称空间吗?
编辑
我不认为这个问题是骗人的,请谅解,因为我意识到有解决办法。
答案 0 :(得分:4)
这就是使用声明的工作方式。全局Foo
和bar1
是两个不同的名称。您的 using声明将名称Foo
带入名称空间X
,但不会从全局名称空间带入其他任何名称(例如枚举成员的名称)。为此,您需要
namespace X {
using ::Foo;
using ::Foo::bar1;
using ::Foo::bar2;
}
答案 1 :(得分:1)
一个对我有用的解决方案是
namespace X{
extern "C"{
#include <C_library.h>
}
}
在尝试之前,我有种印象,我无法将C链接函数放在名称空间中,但是事实证明我错了。那我就可以做
X::bar1
从bar1
访问C枚举成员typedef enum {bar1, bar2} Foo;
。