Я пытаюсь заключить в C ++ следующее объявление, написанное на C ++:
template<typename T, double (*distance)(const DataPoint&, const DataPoint&)>
class VpTree
{...}
У меня также есть следующее определение на C ++:
inline double euclidean_distance(const DataPoint &t1, const DataPoint &t2) {...}
, и япытаясь обернуть это в Cython.Вот что мне удалось придумать, следуя документации:
cdef extern from "vptree.h":
# declaration of DataPoint omitted here
cdef inline double euclidean_distance(DataPoint&, DataPoint&)
cdef cppclass VpTree[T, F]: # F is almost certainly wrong
...
и построить оболочку вокруг этого:
cdef class VPTree:
cdef VpTree[DataPoint, euclidean_distance] tree
def __cinit__(self):
self.tree = VpTree[DataPoint, euclidean_distance]()
К сожалению, это приводит к следующим ошибкам:
------------------------------------------------------------
cdef class VPTree:
cdef VpTree[DataPoint, euclidean_distance] tree
^
------------------------------------------------------------
unknown type in template argument
------------------------------------------------------------
cdef class VPTree:
cdef VpTree[DataPoint, euclidean_distance] tree
def __cinit__(self):
self.tree = VpTree[DataPoint, euclidean_distance]()
^
------------------------------------------------------------
unknown type in template argument
Я подозреваю, что проблема заключается в F
части определения, и вместо этого я пробовал разные вещи, например double(*)(DataPoint&, DataPoint&)
, но это, очевидно, приводит к синтаксической ошибке.