我仍然很难解决这个问题。在名为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中)需要PythonFoo.pythonFoo作为成员
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)
无论我如何尝试导入它,我都会得到“未定义PythonFoo”(因为我猜测pxd文件中没有init),或者我必须手动包含Foo.pyx,这使其现在成为Bar的成员。
有人可以告诉我(请举个例子)这应该如何工作吗?
谢谢。
编辑:PythonFoo和PythonBar在包中的单独模块中。
在Python测试器中,我尝试使用它
import PythonFoo
import PythonBar
foo=PythonFoo()
bar=PythonBar()
bar.SomeFunction(foo)
这是我得到的“没有名为“ PyFoo”的模块
最佳答案
我能够找到为什么它不起作用...模块的实际目录没有被放置,事实上,该文件被放置在build目录的更高目录中。
我用一个简单的方法解决了
sys.path.append('package_directory')
编辑:我还发现了为什么这是...我在setup.py文件所在的目录中有一个__init__.py
,因此编译器认为该目录是软件包的一部分。我删除了__init__.py
,并且不再需要附加目录。
关于python - 如何将C++指针传递给其他cython对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40383112/