python - SWIG 忽略类中的 %mutable;如何解决?

标签 python c++ swig

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

%module example

%immutable;

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

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

但是 SWIG 似乎忽略了类中的 %mutable 指令;它从不为 str1 或 str2 生成任何 MyClass_str1_set 方法。我已经阅读了文档,看起来这应该有效。我也试过将 %mutable MyClass::str1; 放在顶层,但这也无济于事。我错过了什么?

最佳答案

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

// 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;
};

关于python - SWIG 忽略类中的 %mutable;如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23298347/

相关文章:

python - coverage.py 是否正确显示 python 绑定(bind)的测试覆盖率?

python-requests 等同于 curl 的 --data-binary?

python - 1064, "You have an error in your SQL syntax"插入(另一个)

python - 用一些匹配和不匹配的列和索引减去数据框

python - GridSearchCV 将为此运行多少种组合?

c++ - 基于 cmake 的项目 : checking for contrib modules 中的 OpenCV

python - SWIG C++ 预编译 DLL

c++ - 面向对象设计 - 将 C 应用程序转换为 C++

c++ - 有没有办法阻止用户注册/使用他自己的信号处理程序并始终使用特定的处理程序?

python - 如何在cmake中更改SWIG生成的.py文件?