如何将C++指针传递给其他Cython对象

2024-04-20 04:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我还是很难弄明白。以这个简单的场景为例。。在一个名为PyFoo.pyx文件你知道吗

cdef extern from "Foo.h" namespace "Foo":  
    cdef cppclass C_FOO:
        ...........

cdef class PythonFoo:
    C_FOO* pythonFoo
    def __cinit__(self):
        self.pythonFoo=new CFOO()

我确实有一个PyFoo.PXD文件而且,这只是对前向decl执行此操作,以便其他类可以看到它

cdef class PythonFoo:
    C_FOO * pythonFoo

现在我又上了一节课PyBar.pyx文件)这需要Python。Python作为成员

cdef extern from "Bar.h" namespace "Bar":  
    cdef cppclass C_Bar:
         ThisFunctionNeeds(C_FOO*)
cimport PythonFoo        
cdef class PythonBar:
    C_Bar* pythonBar
    def __cinit__(self):
        self.pythonBar=new C_Bar()
    def SomeFunction(self,PythonFoo):
        ThisFunctionNeeds(PythonFoo.pythonFoo)   

无论我如何尝试cimport它,我都会得到“pythonfoonotdefined”(因为pxd文件中没有init),或者我必须手动包含Foo.pyx文件,使其成为酒吧的一员。你知道吗

有人能告诉我(请举例)这是如何工作的吗?你知道吗

谢谢你。你知道吗

编辑:PythonFoo和PythonBar在包的不同模块中。你知道吗

在Python测试程序中,我尝试使用

import PythonFoo
import PythonBar

foo=PythonFoo()
bar=PythonBar()
bar.SomeFunction(foo)

在这里我得到了“没有名为‘PyFoo’的模块”


Tags: 文件fromselffoodefbarexternclass
1条回答
网友
1楼 · 发布于 2024-04-20 04:18:37

我找到了为什么它不起作用。。。模块的实际目录没有被放置,事实上,文件被放置在构建目录的一个更高的目录中。你知道吗

我用一个简单的

你知道吗系统路径附加('package\u directory')

编辑:我也发现了为什么。。。我的__init__.py和我的设置.py因此编译器认为目录是包的一部分。我删除了__init__.py,不再需要附加目录。你知道吗

相关问题 更多 >