如何通过使用swig(Python)添加新属性来扩展C ++类?

时间:2011-09-20 08:35:02

标签: c++ python swig

我有一个C ++类,我需要通过添加一个新的私有属性来扩展它。我还需要将其与特定类绑定,因此我使用 define 。我尝试以与添加新方法相同的方式进行操作,但似乎没有任何效果:

%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 ++中,因为我需要取消引用指针:)。

1 个答案:

答案 0 :(得分:-1)

不确定为什么使用%define。只是将其附加到您的swig接口文件应该可以工作(我没有测试它的成员变量,但我已经将它用于成员函数定义):

 %extend MyClass {
         int new_attribute;
  }

请注意,最后一个分号是多余的。