python - 如何将 pybind11::keep_alive 与返回不同类型对象的函数一起使用
问题描述
我有一些类似的代码:
struct A {
std::vector<int> x;
int y;
};
PYBIND11_MODULE(example, m) {
py::class<A>(m, "A").def(
"__getitem__",
[](A& a, int64_t i) -> py::object {
switch (i) {
case 0: return py::array_t(a.x.size(), a.x.data());
case 1: return py::cast(a.y);
default: throw py::index_error("index out of range");
}
},
py::keep_alive<0, 1>{});
}
从 python调用a[0]
按预期工作。a[1]
失败RuntimeError: Could not allocate weak reference!
,我认为是因为将 int 对象分配为护士没有意义。
在保持对活动的引用的同时处理两个索引的推荐方法是什么A
?(显然,如果返回的对象是一个 int,则不需要让它保持活动状态,但对于 numpy 数组来说就是如此。)
解决方案
推荐阅读
- python - 我正在尝试使用 pdfminer 在 python 中将数据提取为 HTML 元素
- java - Java - 如果返回值为零,比较器如何工作?
- coq - 没有在 coq 中明确指定类型的实例
- java - 链接 2 个对象并从每个对象中获取它们
- google-tag-manager - 有没有办法将容器的标签和触发器共享到谷歌标签管理器中的另一个容器
- google-cloud-platform - 创建新数据实验室实例时参数无效
- python - 当一个新的小部件被分配给它时,框架背景颜色消失(tkinter)
- java - 此服务器无法验证您是否有权访问所请求的文档
- html - 如何使用 Python 搜索 HTML 元素?Python Web 机器人错误
- python - 如何在 XML 中搜索带有“和”的属性文本