#pybind11
#pybind11
Вопрос:
Я пытаюсь использовать заголовок stl_bind pybind11 безрезультатно. Я попробовал это:
#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");
}
Но когда я пытаюсь использовать «std_vector» в python, я получаю это:
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:
Разве вы не пропустили вызов макроса PYBIND11_MAKE_OPAQUE перед PYBIND11_PLUGIN(тест)?
PYBIND11_MAKE_OPAQUE(std::vector<double>);
Согласно документу PyBind11, сначала вы должны отключить преобразование типа по умолчанию из vector в list.