【问题标题】:Named Default Arguments in pybind11pybind11 中的命名默认参数
【发布时间】:2019-07-29 05:11:59
【问题描述】:

我正在使用 pybind11 将 C++ 类方法包装在转换 lambda "shim" 中(我必须这样做是因为原因)。该方法的参数之一在 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 ); 
            });

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

【问题讨论】:

  • 是的,我看过文档,不清楚如何将它们应用于 lambda,因为 lambda 参数是 not 实例化(py:arg 对象)但类型声明。

标签: python c++ pybind11 default-arguments


【解决方案1】:

只需在 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());

【讨论】:

  • 嗨,每次调用python API时都会调用默认参数= Eigen::Matrix4f::Identity()吗?还是在加载 python 模块时只调用一次?
猜你喜欢
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
相关资源
最近更新 更多