使用pybind11将std :: vector导入python会产生python错误

时间:2019-04-20 01:42:30

标签: pybind11

我正在尝试使用pybind11的stl_bind标头无济于事。我尝试过:

#include <vector>
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <pybind11/stl_bind.h>

namespace py = pybind11;

PYBIND11_PLUGIN(test)
{
    py::module m("test", "pybind11 example plugin");
    py::bind_vector<std::vector<double>>(m, "std_vector");
}

但是当我尝试在python中使用“ std_vector”时,我得到了:

In [1]: import test as b

In [2]: vec = b.std_vector()
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-f81a62984a4e> in <module>()
----> 1 vec = b.std_vector()

ValueError: vector::reserve

这是一个错误,还是我使用pybind11错误?

1 个答案:

答案 0 :(得分:0)

在PYBIND11_PLUGIN(测试)之前,您是否错过了对PYBIND11_MAKE_OPAQUE宏的调用?

PYBIND11_MAKE_OPAQUE(std::vector<double>);

根据PyBind11 doc,您应该首先禁用从 vector list 的默认类型转换。