2011-09-20 58 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

相关问题