如何通过swig为C++类添加新属性?
我有一个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 个回答
-1
不太明白你为什么要用 %define。其实只要把这个加到你的 swig 接口文件里就可以了(我没有测试过它在成员变量上的效果,但我用过它来定义成员函数):
%extend MyClass {
int new_attribute;
}
注意最后的分号是多余的。