SWIG:如何将枚举映射到不包含%的标头的整数?

问题描述 投票:0回答:1

我有两个共享某些公共头的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
1个回答
0
投票

我想我一直在努力解决深奥的SWIG问题,并且不知道何时出现这种情况实际上很简单。这似乎可以解决问题。

%include "typemaps.i"

%apply unsigned int { MyEnum };
© www.soinside.com 2019 - 2024. All rights reserved.