Open Vlad-Shcherbina opened 5 years ago
This is an annoying one. Bytes -> vector
+1
Is there a workaround for this atm (or planned feature)?
I have been able to use the workaround suggested in #2517, namely:
.def("some_func", [](kp::SomeClass &self,
py::bytes &bytes) {
py::buffer_info info(py::buffer(bytes).request());
const char *data = reinterpret_cast<const char *>(info.ptr);
size_t length = static_cast<size_t>(info.size);
self.someFunc(
std::vector<char>(data, data + length));
It seems like having a way to provide a conversion from Python bytes into std::vector<uint8_t>
or std::vector<char>
would still be qutie useful, as this has resulted in 5 different functions requiring this extra.
For my use-case I actually have a function that in cpp is defined as std::vector
Is there a reason why this would not be desired? Would it be due to potential ambiguity? If so, what are the current ambiguous usecases?
better to use a string_view or span as the native cast for bytes. zero copy, view only seems like the best fit, imo.
better to use a string_view or span as the native cast for bytes. zero copy, view only seems like the best fit, imo.
Will it work "from the box" or anyway custom conversion required ?
To reproduce, create the following C++ extension:
And invoke it from a Python script like this:
Using
pybind11 2.2.4
, this compiles and runs without errors. Usingpybind11 2.3.0
, this compiles, but produces the following runtime error:This breaking change is not mentioned in the changelog or the upgrade guide.
Version info:
cl.exe
with the/std:c++latest
or/std:c++17
flag