[英]How to pass C++ pointers to to other cython objects
我仍然很難搞清楚這一點。 在名為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)
無論我如何嘗試cimport它,我得到“PythonFoo未定義”(因為我猜pxd文件中沒有init )或者我必須手動包含Foo.pyx,使它現在成為Bar的成員。
有人可以告訴我(請舉例說明)這應該如何工作?
謝謝。
編輯:PythonFoo和PythonBar在包中的單獨模塊中。
在Python測試器中,我嘗試使用它
import PythonFoo
import PythonBar
foo=PythonFoo()
bar=PythonBar()
bar.SomeFunction(foo)
這是我得到“沒有名為'PyFoo'的模塊的地方
我能夠找到為什么它不起作用...模塊的實際目錄沒有放置,事實上,文件放在構建目錄的更高目錄中。
我用簡單的方法修好了它
sys.path.append( 'package_directory')
編輯:我也發現了為什么這是...我在我的setup.py文件所在的目錄中有__init__.py
,所以編譯器認為該目錄是包的一部分。 我刪除了__init__.py
,我不再需要附加目錄了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.