簡體   English   中英

如何將C ++指針傳遞給其他cython對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM