Cython cppclass中的operator =

时间:2019-02-05 22:16:08

标签: cython cythonize

如何告诉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。

1 个答案:

答案 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"

我不能完全确定引用的问题不是错误。

另一个观察结果:归类运算符不是标准容器的“正式”包装的一部分,请参见herehere