本文介绍了pybind11中的命名默认参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用pybind11将C ++类方法包装在转换lambda shim中(由于原因,我必须这样做)。该方法的参数之一在C ++中为默认值。

I'm using pybind11 to wrap a C++ class method in a conversion lambda "shim" (I must do this because reasons). One of the method's arguments is defaulted in C++.

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

在我的pybind代码中,我想保留此可选参数:

In my pybind code I want to preserve this optional parameter:

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

我如何使 optMat 为可选名称生成的Python代码中的参数?

How do I make optMat an optional named argument in the generated Python code?

推荐答案

只需在lambda之后添加它们:

Just add them after the lambda:

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());

这篇关于pybind11中的命名默认参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-01 00:47