2014-01-19 4 views
1
%{ 
#define FOOBAR foobar 
%} 


%define MACRO(cl) 

%pythoncode %{ 
    def cl(): 
      return 
%} 

%enddef 

MACRO(FOOBAR) 

Я бы хотел, чтобы полученный SWIG-код Python имел foobar(). Но макрос C не вступает в силу - у меня есть только FOOBAR().Как использовать макрос C++ в интерфейсе SWIG

Как включить интерфейс SWIG для использования макросов C?

ответ

3

То, что у вас есть, очень близко. В частности у вас есть:

%{ 
#define FOOBAR foobar 
%} 

Однако %{ %} просто делает SWIG передать, что содержится из сгенерированной .cxx файла - не разобрать или считается, что там. По сути, SWIG игнорирует это #define и позволяет компилятору позже позаботиться об этом.

Таким образом, вы можете просто исправить его:

#define FOOBAR foobar 

%define MACRO(cl) 

%pythoncode %{ 
    def cl(): 
      return 
%} 

%enddef 

MACRO(FOOBAR) 

, который работает, как вы надеялись, потому что SWIG препроцессор теперь получает, чтобы увидеть макрос.

. (Примечание: если вы использовали #include внутри %{ %} вы хотите использовать вместо %include по аналогичной причине снова %include причины Swig себя читать и интерпретировать содержимое файла)

+0

ДУХ! В руководстве так говорится. Я просто не смог правильно оценить, что он говорит. –

Смежные вопросы