SWIG 在类中忽略 %mutable;如何解决?
Posted
技术标签:
【中文标题】SWIG 在类中忽略 %mutable;如何解决?【英文标题】:SWIG ignores %mutable in class; how to work around? 【发布时间】:2014-04-25 16:25:36 【问题描述】:在 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】:从文档中并不清楚,现在无法测试,但这可能有效:
// 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;
;
【讨论】:
您的第一个解决方案有效。我的问题之一是 %mutable 在这里不起作用;你必须说%feature("immutable","0") MyClass::str1
。而且你必须在课堂之外,在***拥有它。您的第二个解决方案可能会奏效,但我必须在每个班级都输入%immutable
,这会很烦人。感谢您的帮助!
@garyo 很高兴听到,感谢更新。如果您不介意,请说明为什么不赞成,我也许可以改善答案。干杯!以上是关于SWIG 在类中忽略 %mutable;如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
Swig C++ to C#:如何从 C++ 包装类以使模板类中的方法在 C# 的派生类中可用?
Android - proguard 忽略 -keep 的 Swig 方法