python - pybind11 中的命名默认参数

标签 python c++ pybind11 default-arguments

我正在使用 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 后面即可:

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 - pybind11 中的命名默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57247515/

相关文章:

pybind11 - 如何在单独的线程中实例化 pybind11::array_t

python - OpenMP/Pybind11 : Accessing python object in for loop returns interned string error

python - open() 给出 FileNotFoundError/IOError : Errno 2 No such file or directory

python - Systemd + 非根 Gunicorn 服务 = 不存在的子进程

c++ - opencv minMaxLoc 的 cv::mask 应该是什么样子?

c++ - 由于 "signed char"和 "char",系统头文件中的重新定义错误

Python:如何在开始时关闭对 lib 目录的扫描

python - Lambda- uploader : Unable to import module 'CreateThumbnail' : cannot import name _imaging

c++ - 使用 Clion 的 C++ 简单程序 "expected ` ,' or ` .. .' before ' & &' token"

python - 如何使用 pybind11 包装模板类