SWIG:如何在不包含 header 的情况下将枚举映射到整数?

SWIG: How to map an enum to integer without %including the header?

我有两个共享一些公共 header 的 swig 模块。我只想 %include header 在一个中,但我希望另一个能够在不完全 %include 的情况下仍将枚举视为整数(而不是 类)。有点像这样:

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 objects 而 LibOne 只是自动将枚举视为无符号整数。然后我在他们认为 MyEnum 是什么的两个模块之间存在不匹配。

显然,libTwo 中的简单 %including MyEnum.h 工作得很好,但有很多重复。我也知道我可以为 LibTwo 编写一堆 MyEnum 类型映射,但我想知道是否有 'automatic' 方法可以做到这一点,也许使用 %apply 或类似的东西?

主库中有很多枚举类型,我希望有一种简单的方法来告诉 SWIG 将它们视为整数。

我想我一直在努力解决深奥的 SWIG 问题,但没有意识到什么时候出现了一个实际上很简单的问题。这似乎可以解决问题。

%include "typemaps.i"

%apply unsigned int { MyEnum };