【发布时间】:2019-08-08 03:08:56
【问题描述】:
我有一个C++ 类,如下所示:
// FILE client_matcher.hpp
class DcmSMR {
public:
DcmSMR(int64 t, int32_t o, int32_t l) : ts64(t), moffset(o), mlength(l) {}
DcmSMR() : DcmSMR(0, -1, 0) {}
public:
int64_t ts64;
int32_t moffset;
int32_t mlength;
};
enum class CmResult { Unknown = 0, Detected, Continued };
enum class CmEvent { NotRaised = 0, Raised };
class ClientMatcher {
public:
std::tuple<CmResult, CmEvent> do_track(const DcmSMR& smr) {
return {CmResult::Unknown, CmEvent::NotRaised};
}
};
还有一些 cython 包装器:
// FILE CmPy.pyx
cdef extern from "client_matcher.hpp" nogil:
cdef cppclass DcmSMR:
DcmSMR()
DcmSMR(cint.int64_t t, cint.int32_t o, cint.int32_t l)
enum CmResult:
cm_Unknown "CmResult::Unknown"
cm_Detected "CmResult::Detected"
cm_Continued "CmResult::Continued"
enum CmEvent:
cm_NotRaised "CmEvent::NotRaised"
cm_Raised "CmEvent::Raised"
cdef cppclass ClientMatcher "ClientMatcher":
ClientMatcher()
(CmResult, CmEvent) do_track(DcmSMR& smr)
cdef class CmPy:
cdef:
ClientMatcher* cm_inst
bool inited
def __cinit__(self):
self.inited = False
def __dealloc__(self):
self.inited = False
self.cm_inst = NULL
property inited:
def __get__(self):
return self.inited
cpdef void init(self):
self.cm_inst = new ClientMatcher()
self.inited = True
cpdef tuple do_track(self, cint.uint64_t t, int o, int l):
cdef:
DcmSMR smr
CmResult ret = cm_Unknown
CmEvent evt = cm_NotRaised
assert(self.inited)
smr = DcmSMR(t, o, l)
(ret, evt) = self.cm_inst.do_track(smr)
return (ret, evt)
但是编译时出现这个错误:
CmPy.cpp:1662:3: error: ‘__pyx_ctuple_enum__space_CmResult__and_enum__space_CmEvent’ was not declared in this scope
__pyx_ctuple_enum__space_CmResult__and_enum__space_CmEvent __pyx_t_10;
我不知道这里有什么问题。
【问题讨论】: