如何通过swig为C++类添加新属性?

0 投票
1 回答
1337 浏览
提问于 2025-04-17 02:39

我有一个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;
  }

注意最后的分号是多余的。

撰写回答