SWIG가 다른 정의와 복잡한 함수를 기반으로 새 함수를 "정의"하는 간단한 전 처리기 매크로를 인식하도록하려고합니다. 그래서, C 헤더 파일에 내가 가진 :SWIG의 전 처리기 매크로
#define FOO 1
#define my_macro_fun(args) my_fun(args,FOO)
SWIG는보고 성공적으로 my_fun
를 래핑,하지만 난 그것을 대신 my_macro_fun
을 포장합니다.
SWIG가 다른 정의와 복잡한 함수를 기반으로 새 함수를 "정의"하는 간단한 전 처리기 매크로를 인식하도록하려고합니다. 그래서, C 헤더 파일에 내가 가진 :SWIG의 전 처리기 매크로
#define FOO 1
#define my_macro_fun(args) my_fun(args,FOO)
SWIG는보고 성공적으로 my_fun
를 래핑,하지만 난 그것을 대신 my_macro_fun
을 포장합니다.
SWIG는 macros that are constants을 찾아서 감싸려고하지만 그와 같은 매크로로는 아무 것도 할 수 없습니다. 다행히도 쉽게 해결할 수 있습니다. 다음 헤더 파일이 상상 :
#define FOO 1
#define my_macro_fun(args) my_fun(args,FOO)
void my_fun(int a, int b);
를 당신은 좋아하는 래핑 할 수 다음 my_macro_fun
기능을 생략
%module test
%{
#include "test.h"
%}
%include "test.h"
합니다. 사용 된 경우 정확히 같은 것, 그것은 my_macro_fun(int)
가 호출 가정합니다 래퍼 코드를 생성 할 수 있습니다 -
%module test
%{
#include "test.h"
%}
// Lie! Tell SWIG that it should be wrapped like any other function.
void my_macro_fun(int);
// This is entirely optional: it will cause my_fun to be wrapped as well
%include "test.h"
이 작은 거짓말 꿀꺽 꿀꺽 완벽하게 괜찮 : 당신이 할 필요가 비록 있음을 래핑하는 SWIG를 얻으려면 매크로. 래퍼를 컴파일 할 때 컴파일러는 매크로를 사용하여 끝낼 것이며 아무도 현명하지 못합니다.
인터페이스의 파일에서 %include
전에 실제로 매크로가 필요한 함수는 중요합니다. 그렇지 않으면 SWIG가 구문 오류가 발생하는 선언을 구문 분석하는 동안 매크로를 확장하려고 시도합니다. %include
을 건너 뛰거나 %ignore
을 사용하여 다른 부분에는 포함 시키지만 생성 된 인터페이스에서는 원래 my_fun
을 억제 할 수 있습니다. 아무것도 그것을 주어지지 않은 경우
%module test
%{
#include "test.h"
%}
%typemap(default) int b {
$1 = FOO;
}
%include "test.h"
인수에 대한 값을 제공하려면 다음 몇 가지 꿀꺽 꿀꺽 언어 (예를 들어, 파이썬) 당신은 또한 use the typemap default 수와
.