Добавление пользовательского кода в оболочку SWIG - PullRequest
0 голосов
/ 26 апреля 2018

Я использую SWIG для взаимодействия между C ++ и Python. Я хочу добавить код в сгенерированную оболочку для установки переменной-члена в структуре. Самое близкое, что я нашел, это:

%allowexception TAxis::Min;
%exception TAxis::Min
%{
  $action
  do_something();
%}

struct TAxis
{
  double Min;
  double Max;
};

Однако, это вызовет do_something (), когда TAxis :: Min будет прочитан и записан. Я хочу, чтобы он вызывался только когда написано TAxis :: Min. Любые предложения приветствуются.

1 Ответ

0 голосов
/ 28 апреля 2018

Я отвечу на свой вопрос. Далее создается макрос VAR_WITH_SET_CODE, который можно использовать для выполнения действий до и после установки переменной.

%define VAR_WITH_SET_CODE(class, type, member, pre_code, post_code)
%extend class
{
  type member; 
}

%{
  #define class ## _ ## member ## _get(self) self->member
  #define class ## _ ## member ## _set(self, value) {pre_code} self->member = value; {post_code}  
%}
%enddef

VAR_WITH_SET_CODE(TAxis, double, Min, do_before();, do_after();)
VAR_WITH_SET_CODE(TAxis, double, Max, do_before();, do_after();)
struct TAxis
{
//double Min;
//double Max;
};
...