使用 pybind11 将抽象类作为参数作为参数传递

Posted

技术标签:

【中文标题】使用 pybind11 将抽象类作为参数作为参数传递【英文标题】:Passing abstact classes as parameters as parameter with pybind11 【发布时间】:2017-09-21 13:44:48 【问题描述】:

这是我的问题:

我有两节课

class A

A();
virtual void hello() = 0;

第二个类,在其构造函数中将此类作为参数

class B

B(const A var);
...

对于 a 类,我可以使用文档中描述的蹦床类。如果我尝试为第二个类创建绑定,则会收到以下编译错误:

error: invalid abstract parameter type

使用以下绑定:

PYBIND11_MODULE(module,m)

py::class<A,PyA>(m,"A")
.def(py::init<>());
py::class<B>(m,"B")
.def(py::init<const A>());

我怎样才能传递这样的参数?

谢谢!

【问题讨论】:

【参考方案1】:

B 签名无效 - 无法实例化抽象类并按值传递。

应该是这样的

void B(const A*);

【讨论】:

以上是关于使用 pybind11 将抽象类作为参数作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章

如何将子类作为期望基类的函数的参数传递,然后将该对象传递给指向这些抽象类对象的指针向量?

Pybind11:将字符串*参数传递给构造函数

将派生对象作为参数传递[关闭]

将 shared_ptr 作为参数传递给接受类类型对象的函数

如何派生抽象模板类,模板类型作为函数参数 (C++11)

C++:如何将变量作为参数传递给类构造函数