Я использую непрозрачные типы с pybind11. Например, я определил один для контейнера stl std::vector<uint32_t>
, который является типом аргумента метода FromVec
:
void FromVec(std::vector<uint32_t> vec);
PYBIND11_MAKE_OPAQUE(std::vector<uint32_t>);
PYBIND11_MODULE(tmap, m)
{
py::bind_vector<std::vector<uint32_t>>(m, "VectorUint",
"Unsigned 32-bit int vector.");
m.def("from_vec", &FromVec, py::arg("vec")
}
Теперь я могу (в Python) сделать следующее:
vec = VectorUint([2, 66, 262, 662, 26, 62])
from_vec(vec)
Однако преобразование типов больше не работает, поскольку функция теперь ожидает VectorUint
и больше не принимает list
, например:
l = [2, 66, 262, 662, 26, 62]
from_vec(l)
Есть ли способчтобы разрешить как косые типы, так и преобразование типов? То есть, когда передается list
вместо наклонной границы VectorUint
, он преобразуется в std::vector<uint32_t>
, а не в Python, выдающий «несовместимые аргументы функции»?