Согласно документации pybind11 https://pybind11.readthedocs.io/en/stable/advanced/cast/stl.html:
При включении дополнительного заголовочного файла pybind11 / stl.h происходит преобразование между std :: vector <> / std :: list <> / std:: массивы <>, std :: set <> / std :: unordered_set <> и std :: map <> / std :: unordered_map <> и структуры данных списка, набора и dict в Python включаются автоматически.
Тем не менее, я не могу на всю жизнь заставить это работать.Я полагаю, что я что-то неправильно понимаю, поэтому я надеюсь, что кто-то может прояснить это для меня.
Вот то, что я ожидал работать:
// Test
std::vector<double> test_vec{1,2,3,4,5};
py::list test_list = test_vec;
py::list test_list2(test_vec);
py::list test_list3 = py::cast<py::list>(test_vec);
А вот ошибки:
error: conversion from ‘std::vector<double>’ to non-scalar type ‘pybind11::list’ requested
py::list test_list = test_vec;
error: no matching function for call to ‘pybind11::list::list(std::vector<double>&)’
py::list test_list2(test_vec);
error: no matching function for call to ‘cast(std::vector<double>&)’
py::list test_list3 = py::cast<py::list>(test_vec)
В документах говорится, что в tests/test_stl.cpp
приведены примеры того, как это должно работать, однако я боюсь, что у меня возникают проблемы с расшифровкой того, что происходит в этом файле.