13

SWIGを使用してラップしようとしているC++ライブラリとヘッダーを提供してくれたベンダーがあります。プリプロセッサディレクティブでは、それらが半分賢すぎているようです。

// 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 に答える