gpt4 book ai didi

python - C++ 类和 Python 对象

转载 作者:太空狗 更新时间:2023-10-29 23:01:21 33 4
gpt4 key购买 nike

<分区>

我有两个抽象的 C++ 类,它们在 python 中公开和派生。我试图在 C++ 中提取那些派生对象并调用其中一个类的某些方法,将另一个类的实例传递给第一个类。这些类定义如下:

struct A {
std::vector<int> numbers;

virtual void a() = 0;
};

struct B {
virtual void b(const A& a) = 0;
};

我使用 boost::python 将它们暴露给 Python

namespace py = boost::python;

struct A_wrapper : A, py:wrapper<A> {
void a() {
this->getoverride("a")();
}
};

struct B_wrapper : B, py::wrapper<B> {
void b(const A& a) {
this->get_override("b")(a);
}
};

BOOST_PYTHON_MODULE(example) {
typedef std::vector<int> int_vec_t;

py::class_<int_vec_t>("IntList")
.def(py::vector_indexing_suite<int_vec_t>());

py::class_<A_wrapper, boost::noncopyable>("A")
.def_readwrite("numbers", &A::numbers)
.def("a", py::pure_virtual(&A::a));

py::class_<B_wrapper, boost::noncopyable>("B")
.def("b", py::pure_virtual(&B::b));
}

我的 python 类只是用随机数填充数字数组,B::b 打印这些数字以供调试。

我可以毫无问题地导入它们并将这两个类提取到 boost::shared_ptr。甚至会调用其初始化程序中的任何 Python 代码。

auto pyA = py::extract<boost::shared_ptr<A> >(/*py object containing derivation of A*/)();
auto pyB = py::extract<boost::shared_ptr<B> >(/*py object containing derivation of B*/)();

但是当我尝试调用 pyB->b(*pyA) 时,出现以下错误:

TypeError: No to_python (by-value) converter found for C++ type: A

我做错了什么?如何使用 A 的实例调用 Python 的 B::b 派生?

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com