Я использовал отличную библиотеку 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);
}