Как открыть массив C++ для Python с помощью pybind11?
Привет,
Я хотел бы представить вектор c++, уже заполненный, python с помощью pybind11.
Я не хочу выставлять std::вектор, но вектор, созданный с помощью new.
Как это можно сделать с pybind11?
Что я уже пробовал:
Я попробовал это сделать но получил ошибку:
class Wrapper { private: size_t npt_; float* pAcq_; public: Wrapper(size_t npt, float* pAcq) : npt_(npt), pAcq_(pAcq) {} virtual ~Wrapper() { pAcq_ = 0; npt_=0; } float *data() { return pAcq_; } size_t rows() const { return npt_; } }; PYBIND11_EMBEDDED_MODULE(embeddedmodule, m) { py::class_<Wrapper>(m, "Wrapper" , py::buffer_protocol()) .def_buffer([](Wrapper &m) -> py::buffer_info { return py::buffer_info( m.data(), sizeof(float), py::format_descriptor<float>::format(), 2, {m.rows() , (size_t)1 }, { sizeof(float),sizeof(float) } ); }); } int main() { py::scoped_interpreter guard{}; // start the interpreter and keep it alive py::object main = py::module::import("__main__"); py::object globals = main.attr("__dict__"); float* p = new float[100]; memset(p, 0, sizeof(float) * 100); p[5] = 6.0; Wrapper tr(100, p); globals["tra"] = py::cast(&tr); delete[] p; return 0; }
Richard MacCutchan
"Я попробовал это, но получил ошибку:"
Мы не можем догадаться, какая ошибка или где она происходит.