0
我有一个Cython扩展类型,我们称之为Foo
,我希望能够传递它的一个“实例”(是不是它像一个结构?)到一个纯C的功能,所以我可以从C调用扩展类型的方法。我试着拼凑在一起如何从各种SO和邮件列表文章做到这一点,但一直没有得到它工作。我的C技能相当生锈...将Cython扩展类型方法传递给纯C函数
我知道以下错误的原因很多,但希望它至少说明了我想要做的事......感谢您的耐心等待!
test.c的:
#include <stdlib.h>
#include <stdio.h>
void cfunc(void* foo, double derp) {
double r = foo.bar(derp);
printf("%f", r);
}
cy_test.pyx:
import cython
cimport cython
cdef extern from "/tmp/test.c":
void cfunc(void*, double)
cdef public class Foo[type FooType, object Foo]:
cdef double spam
def __init__(self, spam):
self.spam = spam
cdef public double bar(self, double q) nogil:
q *= 15. + self.spam
return q
cpdef call_func():
foo = Foo(1.5)
cfunc(&foo, 10.)
call_func()
确实有助于给出反映一些实际用例的名称,而不是像'Foo'和'spam'这样的通用名称;例如,你可能会明白为什么,例如,你传递一个'Foo'对象来让它的bar被叫做(可能是非Python中心的,非OO)的C代码,而不是传递一个绑定方法作为可调用的在第一个地方。 – abarnert 2014-11-05 21:11:58