0
我有一種情況,我需要在定義上放置一個守護程序,以便在某些情況下它不會包含在SWIG輸出中多次。不幸的是,在編寫.cc文件之前,SWIG正在擴展#if語句。這裏的情況:停止swig擴展#if表達式
%define FOO(BAR)
%{
#if !defined(_##BAR##_DECLARED)
#define _##BAR##_DECLARED
// declaration stuff
#endif
%}
// implementation stuff
%enddef
SWIG產生FOO(CLS)
如下:
#if !0
#define _CLS_DECLARED
/*@SWIG:dummy.swg,46,[email protected]*/
// declaration stuff
/*@[email protected]*/;
#endif
// implementation stuff
所以#if
語句由痛飲寫輸出(創建沒用#if !0
)之前展開,而不是#define
。有沒有辦法告訴SWIG不要擴大#if
?
我嘗試添加其餘以各種方式定義了一個輔助的宏GUARD(SYM)
:
// Using C-style macros, including !defined()
#define GUARD(SYM) !defined(_##SYM##DECLARED)
// Using C-style macros, excluding !defined()
#define GUARD(SYM) _##SYM##DECLARED)
// Using SWIG-style macros, including !defined()
%define GUARD(SYM) !defined(_##SYM##DECLARED)
%enddef
// Using SWIG-style macros, excluding !defined()
%define GUARD(SYM) _##SYM##DECLARED
%enddef
對於這些我已經相應地修改該#if
語句。輸出總是一樣的。
在情況下,它是非常有用的,這裏的swig -version
輸出:
SWIG Version 2.0.8
Compiled with g++ [i386-apple-darwin11.4.2]
Configured options: +pcre
Please see http://www.swig.org for reporting bugs and further information
其實,這是一個錯字。我正在使用'%{'和'%}',請參閱我的編輯。 – 2013-05-03 20:09:25