SWIG在课堂上忽略了%mutable;如何解决?

时间:2014-04-25 16:25:36

标签: python c++ swig

在Windows上使用SWIG 3.0.0,导出到python,我有以下接口文件:

%module example

%immutable;

class MyClass {
 public:
%mutable;
  char *str1;
%immutable;
  char *str2;
};

我的意图是默认情况下使整个文件中的所有类成员都是不可变的(只读),但允许一些可写 - 在本例中为str1。

但SWIG似乎忽略了类中的%mutable指令;它永远不会为str1或str2生成任何MyClass_str1_set方法。我已经通过了文档,它看起来应该工作。我也尝试将%mutable MyClass::str1;置于顶层,但这也无济于事。我错过了什么?

1 个答案:

答案 0 :(得分:1)

从文档中不是很清楚,现在无法对此进行测试,但这可能有效:

// make everything immutable except str2 data member:
%feature("immutable","1");
%feature("immutable","0") MyClass::str2;

class MyClass {
 public:
  char *str1;
  char *str2;
  char *str3;
};

如果这不起作用,您也可以尝试在类中移动语句:

class MyClass {
 public:

  // make everything immutable except str2 data member:
  %immutable;   
  char *str0;
  char *str1;

  %mutable;   
  char *str2;

  %immutable;   
  char *str3;
  char *str4;
};