向量/ SWIG C ++ / Python中的抽象基类对象列表

时间:2016-08-26 09:30:32

标签: python c++ swig

注意:相应的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)

任何提示?

0 个答案:

没有答案