В моем проекте C ++ у меня есть метод, который возвращает std::list<ModelComponent*>*
, где ModelComponent - это определенный мной класс.
Моя оболочка выглядит следующим образом:
py::class_<ComponentManager>(m, "ComponentManager")
.def(py::init<Model*>())
.def("getAllComponents", &ComponentManager::getAllComponents,
py::return_value_policy::reference);
КогдаЯ пытаюсь использовать этот метод в Python, я получаю следующую ошибку:
TypeError: Unable to convert function return value to a Python type! The signature was
(self: libgenesys.ComponentManager) -> std::__cxx11::list<ModelComponent*, std::allocator<ModelComponent*> >
Did you forget to `#include <pybind11/stl.h>`? Or <pybind11/complex.h>,
<pybind11/functional.h>, <pybind11/chrono.h>, etc. Some automatic
conversions are optional and require extra headers to be included
when compiling your pybind11 module.
Если я сделаю #include <pybind11/stl.h>
в этом файле, все виды ошибок будут генерироваться во время компиляции, начиная с:
/usr/include/pybind11/cast.h:1408:73: error: no matching function for call to ‘get<0>(std::pair<ModelComponent*, unsigned int>*&)’
In file included from /usr/include/c++/9.2.0/bits/unique_ptr.h:36,
from /usr/include/c++/9.2.0/memory:80,
from /usr/include/c++/9.2.0/thread:39,
from main.cpp:15:
Эта ошибка, похоже, возникает из-за другого класса (который также имеет оболочку), который определяет typedef std::pair<ModelComponent*, unsigned int> Connection;
(хотя я игнорирую методы, возвращающие этот конкретный тип).
Я не могупохоже, что есть способ заставить метод, возвращающий std::list
, работать, документация говорит, что включение pybind11/stl.h
должно помочь, но для меня это только дополнительные ошибки.
Редактировать: Код, по которому используется std::pair<ModelComponent*, unsigned int>
, размещен здесь: https://pastebin.com/AX2XBYEd