从 pybind11 包装器访问 class 的实例变量
Accessing instance variables of a class from pybind11 wrappers
我还没有找到用 pybind11 做一件相当简单的事情的方法。假设我有一个聚合 class,我想获取 class 的一个实例变量,这样我就可以深入研究它:
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
实例。当在包装器 class.
的实例上调用 GetX
时,该参数由 pybind11 提供
...
.def("GetX", [](const baz &b) { return b.var.x; });
用法:
>>> import ex
>>> v = ex.baz()
>>> v.GetX()
0
另请参阅 binding lambda functions 上的 pybind11 文档部分。
我还没有找到用 pybind11 做一件相当简单的事情的方法。假设我有一个聚合 class,我想获取 class 的一个实例变量,这样我就可以深入研究它:
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
实例。当在包装器 class.
GetX
时,该参数由 pybind11 提供
...
.def("GetX", [](const baz &b) { return b.var.x; });
用法:
>>> import ex
>>> v = ex.baz()
>>> v.GetX()
0
另请参阅 binding lambda functions 上的 pybind11 文档部分。