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++ 的 Python 代码中修改 time.time() 返回的值
在 C++ 中嵌入 Python:解释器在执行过程中的持久性