Cython定义基于c++的void函数头

2024-06-17 13:34:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我的c++头文件的某些部分:

virtual void OnFrontDisconnected(int nReason){};

我的.pxd文件的一些声明:

^{pr2}$

关于我的.pyx文件代码:

cpdef void OnFrontDisconnected(self, int nReason) except +:
    self._this_md_spi.OnFrontDisconnected(nReason)

但当我试图编译代码时,却遇到了一些错误:
Cannot convert 'void' to Python object
Return with value in void function

我没有在代码中提供return。在

我应该删除代码中的void关键字吗?在


Tags: 文件代码self声明头文件virtualintpyx
1条回答
网友
1楼 · 发布于 2024-06-17 13:34:30

{{cd4>{cd2}不需要返回

但请注意,你有一个更大的潜在问题。通过写作

# In your case, CType == void, but would have
# to be something convertible like int in order
# for it to compile.
cpdef CType function() except +:
    other_function() # also except +

您已禁用所有正确的错误处理!

内部函数中的^ {CD5>}将把它的C++异常转换为Python异常。当Python异常被抛出到{{CD6}},<强> >这将找不到< /Stult>,因为它只寻找C++异常。你要么做:

^{pr2}$

或者

cpdef CType function() except *:
    other_function() # except +

或者

cpdef function():
    other_function() # except +

第三个原因是,不指定返回类型会给它一个Python返回类型,这是自动正确处理的。在


我打赌你没想到会有这么复杂;)。在

相关问题 更多 >