Я бы пошел с std::array
:
class __declspec(dllimport) SomeClass {
public:
void function(uint32_t arg1, uint32_t arg2,
std::array<std::array<float,3>,3> matrix);
...
};
pybind будет знать, как преобразовать это в 2D-список.
Кроме того, внутри вашего cpp-кода доступ такой же, как и для float[3][3]
.
EDIT:
Исходя из вашего комментария, я думаю, вы могли бы использовать что-то вроде этого (см. из документации Pybind ):
py::class_<SomeClass>(m, "SomeClass")
.def("function", [](SomeClass& sc, uint32_t arg1, uint32_t arg2,
std::array<std::array<float,3>,3> m)
{
float M[3][3] = {{m[0][0], m[0][1], m[0][2]},
{m[1][0], m[1][1], m[1][2]},
{m[2][0], m[2][1], m[2][2]}};
return sc.function(arg1, arg2, M);
});
Здесь я предполагаю, что матрица является только входом для функции; Вы можете скопировать результат обратно в массив std, если он также выводится.