Именованные аргументы по умолчанию в pybind11

Я использую pybind11, чтобы обернуть метод класса С++ в лямбда-конверсию «прокладка» (я должен сделать это по причинам). Один из аргументов метода по умолчанию используется в C++.

class A
{
   void meow(Eigen::Matrix4f optMat = Eigen::Matrix4f::Identity());
};

В моем коде pybind я хочу сохранить этот необязательный параметр:

py::class_<A>(m, "A")
       .def(py::init<>())
       .def("meow",
            [](A& self, Eigen::Matrix4f optMat = Eigen::Matrix4f::Identity()) 
            {
               return self.meow( optMat ); 
            });

Как сделать optMat необязательным именованным аргументом в сгенерированном коде Python?


person Adi Shavit    schedule 29.07.2019    source источник
comment
Да, я видел документы, неясно, как их применить к лямбде, так как аргументы лямбды являются не экземплярами (объекта py:arg), а объявлениями типа.   -  person Adi Shavit    schedule 29.07.2019


Ответы (1)


Просто добавьте их после лямбды:

py::class_<A>(m, "A")
    .def(py::init<>())
    .def("meow",
         [](A& self, Eigen::Matrix4f optMat) {
             return self.meow(optMat); 
         },
         py::arg("optMat") = Eigen::Matrix4f::Identity());
person Mika Fischer    schedule 06.12.2019