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

2024-09-28 22:23:08 发布

您现在位置:Python中文网/ 问答频道 /正文

注意:相应的要点是here。在


在一个Siggd+C++/Python应用程序中,我想创建一个函数,它接受抽象基类对象的^ {< CD1>}/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。将此用于

^{pr2}$

编译,但在运行时失败。从

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)

有什么提示吗?在


Tags: includeevalvirtualpublicclassintstdvector