Я использовал отличную библиотеку pybind11, но попал в кирпичную стену.Мне нужно вернуть Python указатель на не копируемый объект (так как объект содержит unique_ptrs).
Обычно это прекрасно работает с предостережением об использовании return_value_policy :: reference.Однако возвращение указателя на объект с вектором не копируемых результатов приводит к ошибке компиляции.Похоже, что pybind хочет выполнить копирование в этом случае, даже если политика возвращаемых значений является ссылкой, а функция явно возвращает указатель.
Почему это так и есть ли обходной путь?
Я использую VS2017 15.9.2 с последней версией pybind11 off master
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <vector>
#include <memory>
/* This fails to compile... */
struct myclass
{
std::vector<std::unique_ptr<int>> numbers;
};
/* ...but this works
struct myclass
{
std::unique_ptr<int> number;
};
*/
void test(py::module &m)
{
py::class_<myclass> pymy(m, "myclass");
pymy.def_static("make", []() {
myclass *m = new myclass;
return m;
}, py::return_value_policy::reference);
}