它不起作用,因为你通过引用传递向量。如果您改为按值传递或按常量引用传递,swig知道该做什么并生成正确的代码。只需更改声明和定义中的类型
Word(std::string word, int numWords, std::vector<double> const &values);
已经足够了。
$ swig -c++ -python word.i
$ g++ -c -fpic word.cpp word_wrap.cxx -I/usr/include/python2.7
$ g++ -shared word.o word_wrap.o -o _word.so -lstdc++
$ python
Python 2.7.13 (default, Nov 24 2017, 17:33:09)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import word
>>> w = word.Word('test', 10, [10.2])
在这种情况下,您可以应用上述调整,因为您不需要
values
作为一个纯粹的参考如果需要引用,则需要做更多的工作,并且必须编写自己的类型映射(可能还要编写自己的容器)。