【发布时间】:2019-12-19 14:22:35
【问题描述】:
在 Cython 中,我想存储一个函数数组,但这些函数并不都有相同的签名。具体来说,有些有两个参数,有些有三个。
我定义了以下内容:
ctypedef long (*func2param)(long param1, long param2)
ctypedef long (*funct3param)(long param1, long param2, long param3)
但是,即使我只有一个这样的签名,我仍然不确定如何让它发挥作用。尝试将 cdef 函数分配给上述类型之一的数组会给我:
func_array2[i] = func_list[i][FUNCTION]
Cannot convert Python object to 'func2param'
尝试施放:
func_array2[i] = <func2param>func_list[i][FUNCTION]
Python objects cannot be cast to pointers of primitive types
【问题讨论】:
-
您想知道为什么您的代码无法构建 - 那么
func_list和func_array2是什么?或者您想知道“如何制作具有不同签名的函数数组?” - 有一些方法可以实现这一点(最容易将所有内容转换为uintptr_t),但取决于你想对数组中的这些指针做什么,并不是所有的都对你有帮助——这里还需要更多信息。还有一个问题,你是否应该做,你想做什么...... -
是的,我想知道“如何制作具有不同签名的函数数组?”根据我上面的解释,我有两个签名,我想要一个可以存储这两种函数的数组。为什么它没有构建的示例只是我尝试做对我来说直观的事情以及我得到的错误。
标签: python python-3.x cython function-pointers