импорт std ::vector в python с использованием pybind11 выдает ошибку python

#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.