c++ - 从 pybind11 包装器访问类的实例变量
问题描述
我还没有找到用 pybind11 做一件相当简单的事情的方法。假设我有一个聚合类,我想获取一个类的实例变量,以便深入研究它:
struct foo {
int x;
};
struct baz {
foo var;
}
PYBIND11_MODULE(test, m) {
py::class_<baz>(m, "baz")
.def(py::init<>())
.def("GetX", /* need a lambda to return var.x */ )
;
}
我在文档中没有找到任何这样做的东西,这似乎是一件显而易见的事情。我可以在 baz 中创建访问器方法,但这是额外的工作。我想在包装代码中的 lambda 中执行此操作。
解决方案
下面的 lambda 创建了必要的GetX
成员函数,它需要一个参数:一个baz
实例。GetX
当在包装类的实例上调用时,该参数由 pybind11 提供。
...
.def("GetX", [](const baz &b) { return b.var.x; });
用法:
>>> import ex
>>> v = ex.baz()
>>> v.GetX()
0
另请参阅绑定 lambda 函数的 pybind11 文档部分。
推荐阅读
- acumatica - 如何订阅 Acumatica 中的用户定义字段
- ruby-on-rails - 我如何在rails应用程序中使用whenver gem在某个时间间隔调用方法?
- javascript - 无法显示 twitter 提要它的 404 获取错误
- wordpress - 特色图片未显示在 WhatsApp 上
- c# - 使用 Foreach 的 Linq (C#)
- git - Git-TF 将更改推送到错误的服务器
- python - 如何接收 Mac 的操作系统版本?对于 Python 3.7
- java - java.io 和文件系统块大小
- python - 如何在 List 中转换我的函数输出?
- reactjs - 如何在空输入字段的开头添加 React 工具提示