python嵌入C++,函数返回shared_ptr(pybind11/boost_python)

Posted

技术标签:

【中文标题】python嵌入C++,函数返回shared_ptr(pybind11/boost_python)【英文标题】:python embedding in C++ with functions returning shared_ptr(pybind11/boost_python) 【发布时间】:2018-08-15 22:54:52 【问题描述】:

我目前正在研究一个用例,我在 python 中实现了 API,它们需要将结构、向量和映射返回到 C++ 调用函数。你能帮我举个例子吗?我在 pybind/boost python 中看到的所有用例只是简单地将 python 嵌入到 C++ 中,没有任何返回值。 我也看到了你的博客,它很好地解释了这两个库。但由于这个用例,我无法继续。 我需要实现的场景是 python -> C++ 接口,C++ 调用者将在其中启动会话并在需要时调用各种 python 对象,然后关闭会话。我对 boost::python 或 pybind11 中的解决方案都很好

【问题讨论】:

这不是minimal reproducible example;请提供一个,将您的代码精简到其他人重现问题所需的最小量。 【参考方案1】:

“我在 pybind/boost python 中看到的所有用例只是简单地将 python 嵌入到 C++ 中,没有任何返回值。”

PyBind11 Example with return value

调用python函数的示例返回一个int,他们首先将其分配给py::object,然后强制转换为int。对于像 std::map、std::vector 这样的 STL 容器,如果您 #include <pybind11/stl.h>,则会自动转换。我不确定转换为结构,但我会使用 PyBind 在 Python 和 C++ 之间的内置 STL 转换之一,然后在 C++ 端构造结构。

【讨论】:

以上是关于python嵌入C++,函数返回shared_ptr(pybind11/boost_python)的主要内容,如果未能解决你的问题,请参考以下文章

C++ - 使用 numpy 嵌入 Python

部署嵌入了python的C++程序

无法在嵌入 C++ 的 Python 代码中修改 time.time() 返回的值

在 C++ 中嵌入 Python:解释器在执行过程中的持久性

Boost python,嵌入时从python调用c++函数

从 C++ 调用 Python