如果类型明确说明,SWIG如何读取C定义的值



我使用SWIG(4.0.1(从我的C头文件生成Python模块。SWIG将以下定义正确地处理到python模块中:

#define SWIG_TEST_DEFINE 3

(在生成的python模块my_interface.py中看起来是这样的(:

SWIG_TEST_DEFINE = _my_interface.SWIG_TEST_DEFINE

但不会接受(并添加到生成的python模块中(:

#define SWIG_TEST_DEFINE ((int)3)

我正在寻找一种解决方案,使SWIG也处理指定类型的这些构造。

如果您愿意更改标题,您可以执行以下操作,以便SWIG将变量定义为3,但宏仍将针对C:进行更正

#ifdef SWIG
#define SWIG_TEST_DEFINE 3
#else
#   define SWIG_TEST_DEFINE ((int)3)
#endif

如果不愿意更改标题,可以正常地将其包括在内,然后仅为SWIG重新定义宏。以下假设test.h包含#define SWIG_TEST_DEFINE ((int)3):

%module test
%{
#include "test.h"
%}
%include "test.h"
#undef SWIG_TEST_DEFINE
#define SWIG_TEST_DEFINE 3

最新更新