我有两个共享某些公共头的swig模块。我只想在其中一个包含标头,但我希望另一个仍能将枚举视为整数(而不是类)而不完全包含它。有点像这样:
MyEnum.h
typedef enum {
One,
Two
} MyEnum;
LibOne.i
module() libOne
%{
#include "MyEnum.h"
%}
%include "MyEnum.h"
HeaderUsingMyEnum.h
#include <MyEnum.h>
MyEnum DoSomething(MyEnum &anEnum);
MyEnum &DoAnotherThing(MyEnum *anEnum);
LibTwo.i
module() libTwo
%{
#include "MyEnum.h"
#include "HeaderUsingMyEnum.h"
%}
%include "HeaderUsingMyEnum.h"
问题是,swig随后转过身来,并在LibTwo中创建了swig对象,而LibOne只是自动将枚举视为未签名的整数。然后,我认为这两个模块的MyEnum不匹配。
显然,在libTwo中包含%MyEnum.h很简单,效果很好,但是重复很多。我也知道我可以为LibTwo写一堆MyEnum类型映射,但是我想知道是否有一种“自动”方式来做到这一点,也许可以使用%apply或类似的方法?
[主库中有很多枚举类型,我很想有一种简单的方法,只是告诉SWIG将它们视为整数。
我想我一直在努力解决深奥的SWIG问题,并且不知道何时出现这种情况实际上很简单。这似乎可以解决问题。
%include "typemaps.i"
%apply unsigned int { MyEnum };