我正在使用最新的Cython和C++17标志(在C++11之上有闭包语法)到GCC。Cython中的C++排序似乎不允许关闭:
#文件:myfunc.pyx
从libcpp.vector cimport vector
从libcpp.cimport排序算法
#从Python调用cpdef,它只是包装了cdef
cpdef myfunc():
#int只是一个例子,我需要对结构向量进行排序
cdef向量[int]v
v、 推回(2)
v、 推回(1)
#编译错误:应为“”,找到“a”
排序(v.begin(),v.end(),[](int a,int b){
返回a<;b
})
是Cython支持C++闭包,如何使用它?如何用C++来做C++排序,因为我把Python移植到Cython,而且有很多lambda排序。
在这种情况下,您实际上不需要一个;结案—您不会从周围范围捕获任何变量。因此,对于您的特定示例,您可以使用cdef函数(必须在全局范围内定义):
cdef布尔比较(双a,双b):
返回a<;B
排序(v.begin(),v.end(),比较)
这显然不是一个普遍的解决办法。但很多时候,传递一个指向C函数的指针确实是您所需要的