Ошибка Cython «Неизвестный тип в аргументе шаблона» - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь создать оболочку Python для следующего класса C ++.

A(vector<pair<double, double>>* points, double r_cutoff) 
void func(vector<pair<double, double>>* offset)

To оболочка Python получает ndarray Numpy в качестве аргумента и создает из него вектор.Затем он пытается передать адрес конструктору 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 Ответ

0 голосов
/ 06 июня 2018

Вам нужно импортировать определения vector и pair, чтобы Cython знал их, то есть:

from libcpp.vector cimport vector
from libcpp.utility cimport pair
....
...