2011-09-20 54 views
0

我有一個C++類,我需要通過添加一個新的私有屬性來擴展。我也需要這個不綁定到一個特定的類,所以我使用定義。我試圖做同樣的方式我添加新的方法,但它似乎沒有任何效果:如何通過使用swig(Python)添加新屬性來擴展C++類?

%define add_new_attribute(cls) 
    %extend MyClass { 
     int new_attribute; 
    }; 
%enddef 

我真的不關心,如果新的屬性是私有還是公有,即使我寧願它是私人的。文件也沒有提到這方面的任何內容。還有另一種方法可以做到嗎?

編輯:

似乎是從的方法。然而實例化一個新的實例屬性,沒有問題。例如,這是可能的(這將創建一種迭代的,保持它的實例狀態):

%pythoncode %{ 
    def mymethod(self): 
     self.i = self.__dict__.get('i',0) 
     self.i += 1 
     print self.i 
    %} 

但是我真的需要這個代碼是C++,因爲我需要取消引用指針:)。

+0

我不認爲這可以工作 - 它需要額外的存儲空間分配給SWIG無法觸及的部分代碼 – Flexo

+0

爲什麼你需要它在C++中,除非它是一些C++數據結構? SWIG會將其插入到原始C++類之外的包裝文件中。 – subhacom

回答

-1

不確定你爲什麼使用%define。在追加給你的痛飲接口文件應該工作(我沒有測試它的成員變量,但我已經使用這個成員函數定義):

%extend MyClass { 
     int new_attribute; 
    } 

注意最後一個分號是多餘的。

+0

我說過爲什麼我在原文中使用define。我還說過,我嘗試了這種精確的語法,雖然它可以用於方法,但它不適用於屬性。 – Oin

相關問題