Pybind11-将指针返回到unique_ptr容器

时间:2018-12-16 23:04:12

标签: pybind11

我一直在使用出色的pybind11库,但遇到了麻烦。 我需要向Python返回指向不可复制对象的指针(因为该对象包含unique_ptrs)。

通常,这可以很好地解决使用return_value_policy :: reference的警告。 但是,返回指向具有不可复制向量的对象的指针会导致编译错误。 在这种情况下,即使返回值策略是引用且函数显式返回了指针,pybind似乎也希望执行复制。

这是为什么,并且有解决方法?

我正在将VS2017 15.9.2与最新的pybind11关闭使用

#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);
}

1 个答案:

答案 0 :(得分:0)

我解决了这个问题

需要显式删除复制构造函数和赋值运算符,即添加以下内容可使pybind识别出它无法复制

myclass() = default;
myclass(const myclass &m) = delete;
myclass & operator= (const myclass &) = delete;