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 };
我有两个共享一些公共 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 };