Cython“模板参数中的未知类型”错误
Posted
技术标签:
【中文标题】Cython“模板参数中的未知类型”错误【英文标题】:Cython "Unknown type in template argument" error 【发布时间】:2018-06-06 09:31:04 【问题描述】:我正在尝试为以下 C++ 类创建 Python 包装器。
A(vector<pair<double, double>>* points, double r_cutoff)
void func(vector<pair<double, double>>* offset)
To Python wrapper 获取 Numpy 的 ndarray 作为参数并从中创建一个向量。然后,它尝试将地址传递给 C++ 构造函数及其函数“func”。
cdef extern from "cell.h" namespace "cl":
cdef cppclass A:
A(vector[pair[double, double]]* points, double r_cutoff) except +
void func(vector[pair[double, double]]* offset)
cdef class PyA:
cdef A* thisptr
def __cinit__(self, np.ndarray points, double r_cutoff):
cdef vector[pair[double, double]] vec
vec.resize(points.shape[0])
for i in range(points.shape[0]):
vec[i].first = points[i][0]
vec[i].second = points[i][1]
self.thisptr = new A(&vec, r_cutoff)
def func(self, np.ndarray offset):
cdef vector[pair[double, double]] vec
vec.resize(offset.shape[0])
for i in range(offset.shape[0]):
vec[i].first = offset[i][0]
vec[i].second = offset[i][1]
self.thisptr.func(&vec)
但它抱怨有一个未知的类型在
def func(self, np.ndarray offset):
cdef vector[pair[double, double]] vec
^
------------------------------------------------------------
file.pyx:27:25: unknown type in template argument
我正确地导入了向量和对,但我不明白为什么 Cython 会抱怨这个。任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:您需要导入vector
和pair
的定义,以便Cython 知道它们,即:
from libcpp.vector cimport vector
from libcpp.utility cimport pair
....
【讨论】:
你真是个天才。以上是关于Cython“模板参数中的未知类型”错误的主要内容,如果未能解决你的问题,请参考以下文章