gpt4 book ai didi

c++ - 将智能指针中包含的 C++ 对象传递给 Python

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:26:20 25 4
gpt4 key购买 nike

我有一个 C++ 类(class)。
我在我的 C++ 代码中从这个类创建了一个对象。我希望这个对象可以在 Python 中访问。我用 boost::shared_ptr保留对象地址。

我已经查看了一些关于此的帖子,但不是很有帮助。我认为最好的方法是在解释器初始化后在 Python 命名空间中创建一个对象,然后将我的 boost shared_ptr 分配给在 Python 中创建的对象。

我已经使用 BOOST_PYTHON_MODULE 包装了我的类(class)在 cpp 中测试了一些方法,比如 namespace["my_module_name_in_python"] = class<"my_class">...能够在 python 中创建一个对象并用 shared_ptr 填充它.

总而言之,我的问题是如何传递 shared_ptr 中包含的 C++ 对象?到 python。

提前致谢

最佳答案

这取自官方的 boost python 文档。

假设您有一个如下所示的 C++ 类:

class Vec2 {
public:
Vec2(double, double);
double length();
double angle();
};

您可以像这样为它派生 Python 接口(interface):

object py_vec2 = class_<Vec2>("Vec2", init<double, double>())
.def_readonly("length", &Point::length)
.def_readonly("angle", &Point::angle)
)

类定义现在存储在变量 py_vec2 中。现在我可以使用以下方法创建所述类的实例:

object vec_instance = py_vec2(3.0, 4.0);

现在可以将此实例注入(inject) Python 解释器。例如,将其设置为 "__main__" 模块的变量:

object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");

main_namespace["vec_instance"] = vec_instance;

关于c++ - 将智能指针中包含的 C++ 对象传递给 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18873885/

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