我正在尝试使用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错误?
答案 0 :(得分:0)
在PYBIND11_PLUGIN(测试)之前,您是否错过了对PYBIND11_MAKE_OPAQUE宏的调用?
PYBIND11_MAKE_OPAQUE(std::vector<double>);
根据PyBind11 doc,您应该首先禁用从 vector 到 list 的默认类型转换。