有没有一种简单的方法可以使用SWIG将C头文件中定义的枚举常量暴露给Python,但是没有使用%include "header.h"
来整个标题?换句话说,我手动编写SWIG接口,因为我不想为所有内容自动生成python绑定。但是,头文件中定义了枚举,我想让Python端可用。我的文件看起来像这样:
foo.h中
typedef enum fooEnumType {
CAT, DOG, HORSE
} fooEnum;
foo.i
%module foo
%{
#include "foo.h"
%}
在foo.i
中,我可以在我的C代码中访问CAT
。当然,Python端不提供CAT
,DOG
和HORSE
。我如何将它们暴露给Python?
答案 0 :(得分:1)
只需在foo.h
文件中添加foo.i
所需的部分,而不是处理所有内容的%include "foo.h"
:
<强> foo.i 强>
%module foo
%{
#include "foo.h"
%}
typedef enum fooEnumType {
CAT, DOG, HORSE
} fooEnum;
<强> foo.h中强>
typedef enum fooEnumType {
CAT, DOG, HORSE
} fooEnum;
typedef enum otherEnumType {
A, B, C
} otherEnum;
输出:
>>> import foo
>>> dir(foo)
['CAT', 'DOG', 'HORSE', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '_
_spec__', '__warningregistry__', '_foo', '_newclass', '_object', '_swig_getattr', '_swig_property', '_swig_repr', '_swig
_setattr', '_swig_setattr_nondynamic']
请注意,CAT / DOG / HORSE已定义,但A / B / C未定义。 swig -python foo.i
生成了包装器而没有错误。