代码之家  ›  专栏  ›  技术社区  ›  mvanveen esm

在Pyrex中包装相互依赖的结构

  •  2
  • mvanveen esm  · 技术社区  · 15 年前

    我正试图用pyrex在python中包装一些C代码。我在定义两个结构时遇到了一个问题。在这种情况下,结构是按照彼此的术语定义的,而Pyrex似乎无法处理冲突。结构看起来是这样的:

    typedef struct a {
        b * b_pointer;
    } a;
    
    typedef struct b {
        a a_obj;
    } b;
    

    它们被放在不同的文件中。我用来包装结构的代码如下所示:

    def extern from "file.c": 
        ctypdef struct a: 
                b * b_pointer 
        ctypedef struct b: 
                a a_obj
    

    File.c 是包含函数定义的独立文件,与结构定义不同,但它包含定义这些结构的源文件。有什么方法可以把这两个结构都包起来吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Alex Martelli    15 年前

    你可以使用 incomplete type (您确实需要中的相应c typedef位于 .h 文件,不仅仅是 .c 文件):

    cdef extern from "some.h":
      ctypedef struct b
      ctypedef struct a:
        b * b_pointer
      ctypedef struct b:
        a a_obj