Cython传递类to_py_call_code错误

时间:2017-03-01 20:16:59

标签: python c++ cython

我试图使用cython 0.25.2(conda-forge build)包装两个C ++类。将它们定义为:

cdef extern from "Isd.h" namespace "csm":
    cdef cppclass CppIsd "csm::Isd":
        Isd() except +

cdef extern from "MdisPlugin.h":
    cdef cppclass CppMdisPlugin "MdisPlugin":
        MdisPlugin() except +
        string getPluginName()
        string getManufacturer()
        string getReleaseDate()
        string getCsmVersion
        size_t getNumModels()
        string getModelName(size_t modelIndex)
        bool canModelBeConstructedFromISD(const CppIsd &isd, const string &modelname)
        string convertISDToModelState(const CppIsd &isd, const string &modelname)

Isd类只是一个存根,公开为:

cdef class Isd:
    cdef unique_ptr[CppIsd] thisptr
    def __init__(self):
        self.thisptr.reset(new CppIsd())

CppMdisPlugin的最后两个方法是抛出以下内容:AttributeError:' ErrorType'对象没有属性' to_py_call_code' (ExprNodes.py中的第12552行)。

最小包装代码是:

cdef class MdisPlugin:
    cdef:
        unique_ptr[CppMdisPlugin] thisptr

    def __init__(self):
        self.thisptr.reset(new CppMdisPlugin())

    def from_isd(self, Isd isd, modelname):
        return deref(self.thisptr).convertISDToModelState(deref(isd.thisptr), modelname)

是否由.pyx文件中的miss定义或Cython内部发生的事件引起错误?

0 个答案:

没有答案