Встраивание Python в C++ с функциями, возвращающими shared_ptr(pybind11/boost_python)
В настоящее время я работаю над сценарием использования, в котором я реализовал API-интерфейсы на python, и они должны возвращать struct, vector и map в функции вызывающей стороны C++. Не могли бы вы помочь мне с примером, как это сделать. Все примеры использования, которые я вижу в pybind/boost python, - это просто вставка python в C++ без какого-либо возвращаемого значения. Я также натолкнулся на ваш блог, который довольно хорошо объяснил две библиотеки. Но я не мог продолжить из-за этого варианта использования. Сценарий, который мне нужно реализовать, - это интерфейс Python -> C++, в котором вызывающая сторона C++ начнет сеанс и при необходимости вызовет различные объекты Python, а затем закроет сеанс. Я в порядке с решением как в Boost:: Python или Pybind11
1 ответ
"Все примеры использования, которые я вижу в pybind/boost python, - это просто вставка python в C++ без какого-либо возвращаемого значения".
Пример PyBind11 с возвращаемым значением
Пример вызываемой функции python возвращает int, который они сначала присваивают py::object, а затем приводят к int. Для контейнеров STL, таких как std:: map, std:: vector, есть автоматическое преобразование, если вы #include <pybind11/stl.h>
, Я не уверен насчет преобразования в struct, но я бы использовал одно из встроенных в PyBind преобразований STL между Python и C++, а затем построил бы структуру на стороне C++.