13

我们有一个供应商为我们提供了一个 C++ 库和头文件,我正在尝试使用 SWIG 对其进行包装。看起来他们对预处理器指令太聪明了一半:

// top.h
#define DECLARE_WITH_COMMA(a) a,

进而

// foo.h
#include "top.h"

#define MY_TYPES(d) \
  d(One)   \
  d(Two)   \
  d(Three) \
  NumElems

enum MyTypes {
  MY_TYPES(DECLARE_WITH_COMMA)
};

这是一种冗长的说法,当我尝试在“foo.h”上运行 SWIG(版本 2.0.4)时,我得到:

foo.h:12: Error: Syntax error in input(1).

所以我的问题是我的选择是什么,因为我可能不想更改供应商提供的标头?

4

1 回答 1

12

默认情况下,SWIG 不会递归到嵌套标题中,因此您的.i文件应类似于:

%module mymod

%{
#include "foo.h"
%}

%include "top.h"
%include "foo.h"

还有一个 SWIG 开关:

-includeall     - Follow all #include statements

但是,如果您的系统标头可能比您预期的要多。

于 2012-05-26T01:18:48.253 回答