注意:相应的Gist是here。
在SWIGged C ++ / Python应用程序中,我想创建一个接受std::vector
/ Python抽象基类对象列表的函数,例如,
#ifndef MYTEST_HPP
#define MYTEST_HPP
#include <iostream>
#include <vector>
#include <memory>
class MyBaseClass {
public:
virtual void eval() const = 0;
};
class MyTestClass: public MyBaseClass {
public:
virtual void eval() const {
std::cout << "MyTestClass::eval()" << std::endl;
}
};
void
mytest(const std::vector<std::shared_ptr<MyBaseClass>> & a) {
std::cout << "length: " << a.size() << std::endl;
}
#endif // MYTEST_HPP
请注意,我们在这里使用std::shared_ptr
。与
%module mytest
%{
#define SWIG_FILE_WITH_INIT
#include "mytest.hpp"
%}
%include <std_shared_ptr.i>
%shared_ptr(MyBaseClass);
%shared_ptr(MyTestClass);
%include <std_vector.i>
namespace std {
%template(List) vector<std::shared_ptr<MyBaseClass>>;
}
%include "mytest.hpp"
确实编译,但在运行时失败。从
import mytest
a = mytest.MyTestClass()
mytest.mytest([a])
一个得到
python: /tmp/l/build/mytestPYTHON_wrap.cxx:2385: int SWIG_Python_ConvertPtrAndOwn(PyObject*, void**, swig_type_info*, int, int*): Assertion `own' failed.
Aborted (core dumped)
任何提示?