将预初始化指针包装在 cython 类中

2024-03-05

我正在尝试使用一个 C 库,该库使用回调函数 (callback_function) 来提供指向我想要包装的结构 (glp_tree) 的指针。

使用未在其中创建的指针初始化实例的正确方法是什么__cinit__?我在 cython 文档中找不到此模式的示例。

我有一些工作代码(见下文),它将指针转换为整数并返回,但我不确定这是一个好的做法/理智。

cdef extern from "stdint.h":
    ctypedef unsigned long long uint64_t

cdef extern from "glpk.h":
    ctypedef struct glp_tree:
        pass

cdef void callback_func(glp_tree* tree, void *info):
    treeobj = Tree(<uint64_t>tree) // cast to an integer...

cdef class Tree:
    cdef glp_tree* ptr
    def __init__(self, uint64_t ptr):
        self.ptr = <glp_tree*>ptr // ... and back to a pointer

直接传递 glp_tree 对象似乎可以工作(尽管这不是我想要做的),但尝试传递指针会导致编译器错误:

Cannot convert 'glp_tree *' to Python object

而不是使用__init__/__cinit__(它总是期望 Python 对象作为参数),您可以使用自定义@staticmethod cdef创建实例:

cdef class Tree:
    cdef glp_tree* ptr

    def __init__(self, *args):
        raise TypeError('Cannot create instance from Python')

    @staticmethod
    cdef Tree create(glp_tree* ptr):
        obj = <Tree>Tree.__new__(Tree) # create instance without calling __init__
        obj.ptr = ptr
        return obj
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将预初始化指针包装在 cython 类中 的相关文章

随机推荐

  • SolidJS:打字稿错误表示值的类型为“未定义”,尽管检查它不是

    我有一些 SolidJS 代码 例如 value undefined img src srcs value where value是一个信号 我在下面收到 TypeScript 错误value saying Type undefined c
  • 如何在Firemonkey中绘制虚线?

    我想在 Firemonkey 项目中的 TPaintbox 画布上绘制点状网格 结果应该如下所示 首先 我想我会绘制垂直虚线 然后绘制水平虚线 因此考虑到这一点 我尝试先绘制一条线 以使外观恰到好处 这就是我尝试过的 Canvas Stro
  • newBufferWithBytes() 有大小限制吗?

    我一直在使用 Metal 渲染多面体 当我尝试使用 newBufferWithBytes 渲染一个二十面体实体时 该问题发生了 该实体的顶点仅包含 1680 字节的数据 然后整个应用程序停止 CPU 和 GPU 帧都降至零 一切都恢复正常
  • Spring Security 具有数据库和多个角色?

    我正在尝试使用 spring 3 0 制作一个应用程序 现在我决定尝试一下 spring security 和 hibernate 我已经看到可以用数据库支持它 并且我已经看到了定义您自己的查询的参考 现在我遇到的问题是我找到的教程不太清楚
  • 如何高效存储100万个单词并通过starts_with、contains或ends_with进行查询?

    网站如何喜欢this https www morewords com contains c存储数万个 包含 c 的单词 或者类似this https word tips words with d and c 带有 d 和 c 的单词 或者更
  • 如何判断两个日期是否在同一天或同一小时? [复制]

    这个问题在这里已经有答案了 JavaScript Date 对象将日期与时间进行比较 因此 如果比较 time1 getTime time2 getTime 他们将是 false 如果至少有一毫秒不同 我们需要的是有一个很好的方法来按小时
  • 在 Google 脚本中尝试/捕获 HTTP 响应的最佳方法

    我对 JavaScript 和 Google apps 脚本还很陌生 这是我第一次尝试使用 Try Catch 语句 我正在运行连接到页面的脚本 它在大多数情况下都可以毫无问题地连接 但有时它不会响应并抛出 http 错误 或者 响应将为空
  • HtmlUnitDriver 无法正确获取页面

    我是这方面的新手 基本上我正在尝试使用 HtmlUnitDriver 这是我的代码 WebDriver driver new HtmlUnitDriver driver get http www google com System out
  • 如何通过单击按钮打开新窗口

    作为我的程序的一部分 我需要一个按钮 当用户单击它时 它会打开一个新窗口 好吧 我想我应该有一个类来制作框架并通过按钮调用它 但我没有任何开始的想法 我刚刚在程序中找到了按钮 但它不起作用 那么有人可以告诉我该怎么做吗 或编码 这是您想要执
  • 更改 Azure Devops 中的组织 URL 时对管道代理的影响

    我想在 Azure Devops 中重命名我的组织 URL 这 articles https support microsoft com en gb help 2793597 things to do before and after yo
  • 使用 Office 2010 COM 的 asp.net Web 服务

    我正在编写一个 Web 服务 并希望将 docx 或 doc 更改为 xps 我正在使用 Office com 来帮助我另存为 xps 格式 如下所示 WebMethod public string GetDocPreviewUrl str
  • Java编译器/解释器

    为什么我们说Java是一种编译型和解释型语言 这样做的好处是什么 被编译和解释 Java 在编译时被编译为中间 字节代码 这与 C 等语言在编译时编译为机器语言形成对比 Java 字节代码不能像编译的 C 代码那样直接在硬件上执行 相反 字
  • 在 eclipse 中调试 Android 返回堆栈

    有没有办法在 Eclipse ADT IDE 中可视化 Android 中的后台堆栈以及活动和片段 您的意思是只是为了调试目的看看它是什么样子吗 在这种情况下 定义 public static void displayBackStack F
  • 如何使用自定义 JTable 单元格编辑器和单元格渲染器

    我创建了一个带有自定义表格渲染和自定义单元格编辑器的 JTable 它给出了图像中的结果 我使用扩展 JPanel 的单独类创建了第一个表格单元格中显示的面板 并将表值添加为 tbl setCellEditor new customCell
  • Themeforest 到 Rails 应用程序

    这是我第一次在 Rails 应用程序中使用外部 HTML 主题 我从 Themeforest 下载了一个主题 当然 它带有大量的 JS CSS 和图像 我想知道你们大多数人在将主题集成到 Rails 应用程序时使用什么工作流程 您是否将所有
  • 如何在Code::Blocks中查看反汇编?

    I read 本文 http altdevblogaday com 2011 11 09 a low level curriculum for c and c 关于 C C 的一些底层基础 作者基本上是通过编译器生成的汇编代码逐行向我们展示
  • PROCESS_OUTGOING_CALLS 如何停止拨打电话?安卓

    可以采取什么措施来阻止 Android 设备在特定时间拨打特定号码的拨出电话 我正在使用以下权限 android permission PROCESS OUTGOING CALLS 但接听者无法停止通话
  • 如何在 Alertdialog 上显示文本和可点击的 URL 链接?

    我阅读了示例代码并尝试了下面的一些内容 但它不起作用 该文本似乎不是超链接 请帮忙 String randomString XXXX getString if randomString contains XXXX TextView tv n
  • 如何使用 Postman Collection 生成代码

    我知道可以从单个 Postman 请求生成代码片段 但我找不到整个集合的类似功能 我还知道有类似的工具newman https www npmjs com package newman用于运行 Postman Collection 2 1
  • 将预初始化指针包装在 cython 类中

    我正在尝试使用一个 C 库 该库使用回调函数 callback function 来提供指向我想要包装的结构 glp tree 的指针 使用未在其中创建的指针初始化实例的正确方法是什么 cinit 我在 cython 文档中找不到此模式的示