将C枚举导入C 名称空间
Importing C enum into C++ namespace
我正在为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
等等?或者,换句话说,我可以将枚举值直接导入命名空间?
编辑
我认为问题不是一个骗子,请看到我的答案,因为我意识到有一个解决方案。
这就是使用声明的方式。全局Foo
和bar1
是两个不同的名称。您的使用声明将名称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 名称空间内部的链接?
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 尝试导入pybind-opencv模块时出现libgtk错误
- 在命名空间中定义函数还是限定函数
- 导入库可以跨dll版本工作吗
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- OpenGL相机和相机空间转型的困惑
- CUDA内核和数学函数的显式命名空间
- 是否可以将函数导入命名空间,但不能导出它?
- 将以"_[a-z0-9]"开头和"using"的标识符导入全局命名空间是否定义良
- 使用工程空间在软件包中导入的线性代数库EIGEN
- 将C枚举导入C 名称空间
- 将嵌套类导入命名空间-C++
- 如何在命名空间中导入C++类的 dll
- 我如何使用这个系统?. Net命名空间导入到Visual Studio 2010 c++项目中
- 如何使用C++在一行中导入同一命名空间的多个成员