我试图使用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内部发生的事件引起错误?