Optimistic76 Ответов: 0

Как открыть массив 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

"Я попробовал это, но получил ошибку:"
Мы не можем догадаться, какая ошибка или где она происходит.

0 Ответов