【问题标题】:Adding custom code to SWIG wrapper将自定义代码添加到 SWIG 包装器
【发布时间】:2018-04-26 19:59:00
【问题描述】:

我正在使用 SWIG 在 C++ 和 Python 之间进行接口。我想在生成的包装器中添加一些代码,以在结构中设置成员变量。我发现的最接近的是:

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

struct TAxis
{
  double Min;
  double Max;
};

但是,当 TAxis::Min 被读取和写入时,这将调用 do_something()。我希望仅在写入 TAxis::Min 时调用它。任何建议表示赞赏。

【问题讨论】:

    标签: python c++ swig


    【解决方案1】:

    我会回答我自己的问题。下面创建一个宏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;
    };
    

    【讨论】:

      猜你喜欢
      • 2013-01-21
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多