如何告诉Cython我的C ++类已重载operator=
?我尝试过:
cdef extern from "my_source.H":
cdef cppclass MyStatus:
void operator=(const char* status)
cdef public void setStatus(MyStatus& status):
status = "FOO"
,但是Cython抱怨“分配给参考状态”,或者(如果我将状态设为非参考)则从字符串“ FOO”中构造一个python对象,然后尝试将python对象分配给status。
答案 0 :(得分:1)
您的代码中的问题是,对于Cython "FOO"
是一个Python对象。对于类似
char *s = "FOO"
Cython足够聪明,可以理解您想要的内容,并自动将"FOO"
解释为char *
。
但是,Cython并没有真正“理解” /解释包装的c ++函数的签名(因为它必须是c ++编译器),因此无法知道您希望"FOO"
是一个{{ 1}}。
因此,您必须帮助Cython,例如:
char *
您还必须通过参考来解决此问题,例如通过:
status = <const char *>"FOO"
或者如果您希望保持函数签名不变:
cdef public void setStatus(MyStatus *status):
status[0] = <const char *>"FOO"
我不能完全确定引用的问题不是错误。