我在myenum.h中有一个简单的枚举:
enum MyEnum {
ONE,
TWO,
THREE
};
Run Code Online (Sandbox Code Playgroud)
问题是,当我将它映射到Python时,我只能通过模块名称访问枚举,而不是通过MyEnum.因此值ONE,TWO,THREE包含在我定义的任何其他函数中,而不是包含在MyEnum中.
我的api.i文件是:
%module api
%{
#include "myenum.h"
%}
%include "myenum.h"
Run Code Online (Sandbox Code Playgroud)
我用SWIG生成
swig -builtin -python api.i
Run Code Online (Sandbox Code Playgroud)
并将其导入Python
import _api
Run Code Online (Sandbox Code Playgroud)
现在我必须使用_api模块中的枚举值:
_api.ONE
_api.TWO
_api.THREE
Run Code Online (Sandbox Code Playgroud)
虽然我想像他们一样使用它们
_api.MyEnum.ONE
_api.MyEnum.TWO
_api.MyEnum.THREE
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎么能做到这一点?
有一个 SWIG 功能nspace确实可以满足您的需求,但不幸的是 Python 尚不支持它。我总是必须在结构中定义枚举,以便它以您想要的方式在 SWIG 中显示。例子:
%module tmp
%inline %{
struct MyEnum {
enum { A,B,C };
};
%}
Run Code Online (Sandbox Code Playgroud)
结果:
>>> import tmp
>>> tmp.MyEnum.A
0
>>> tmp.MyEnum.B
1
>>> tmp.MyEnum.C
2
Run Code Online (Sandbox Code Playgroud)