Cython extern 函数从 foo.h 转换为类似模块的对象?

发布于 2024-11-29 18:33:30 字数 586 浏览 1 评论 0原文

我想做以下事情:

cdef extern from "foo.h" namespace "foo":
    int bar(int, int)

def bar(a, b):
    return foo.bar(a, b)

但这不起作用。 命名空间“foo”部分的作用是什么?如何实现将从“foo.h”外部的函数加载到名为 foo 的对象中?

更新

我可以使用以下文件结构和代码找到解决方案:

spam.pyx
spam_c.pxd
c\
  spam.c

# spam.pyx
cimport spam_c as spam

def foo(a, b):
    return spam.foo(a, b)

# spam_c.pxd
cdef extern from "spam.c":
    double foo(double, double)

有更好的方法来解决这个问题吗?

I'd like to do the following:

cdef extern from "foo.h" namespace "foo":
    int bar(int, int)

def bar(a, b):
    return foo.bar(a, b)

But this does not work. What is the namespace "foo" part for ? And how can I achieve to load the functions externed from "foo.h" into an object named foo ?

Update:

I could find a solution using the following file-structure and code:

spam.pyx
spam_c.pxd
c\
  spam.c

# spam.pyx
cimport spam_c as spam

def foo(a, b):
    return spam.foo(a, b)

# spam_c.pxd
cdef extern from "spam.c":
    double foo(double, double)

Is there a better way to solve this ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鸠魁 2024-12-06 18:33:30

我发现这是处理这个问题的首选方法。

I have found out that this is the preferred way to deal with this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文