2014-04-25 49 views
1

在Windows上使用SWIG 3.0.0,出口到蟒蛇,我有以下接口文件:SWIG在課堂上忽略%mutable;如何解決?

%module example 

%immutable; 

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

我的意圖是在默認情況下使整個文件中的所有類成員不可變(只讀)但允許一些可寫 - 在這種情況下是str1。

但SWIG似乎忽略了類內部的可變指令;它從不會爲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; 
}; 
+0

您的第一個解決方案有效。我的問題之一是%mutable在這裏不起作用;你必須說'%feature(「immutable」,「0」)MyClass :: str1'。而且你還必須在課堂之外,頂層有這樣的課程。你的第二個解決方案可能會起作用,但是我不得不在每個班級中放置'%immutable',這會很煩人。謝謝您的幫助! – GaryO

+0

@garyo很高興聽到,謝謝你的更新。如果你不介意,說明爲什麼沒有upvote,我可能能夠改善答案。乾杯! – Schollii

+0

只是忘了 - 再次感謝! – GaryO