Erro de sobrecarga do operador de wrapper Cython C ++ ()
Conectado com a minha pergunta anterior.Usando o Cython para envolver uma classe C ++ que usa tipos OpenCV como parâmetros
Agora estou preso em outro erro. Meu código de embrulho de cython do tipo MatC33d do OpenCV se parece com:
cdef extern from "opencv2/core/core.hpp" namespace "cv":
cdef cppclass Matx33d "cv::Matx<double, 3, 3>":
Matx33d()
Matx33d(double v0, double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8)
double& operator()(int i, int j)
Então eu defino uma função para copiar o Matx33d para um array numpy.
cdef Matx33d2numpy(Matx33d &m):
cdef np.ndarray[np.double_t, ndim=2] np_m = np.empty((3,3), dtype=np.float64)
np_m[0,0]= m(0,0); np_m[0,1]= m(0,1); np_m[0,2]= m(0,2)
np_m[1,0]= m(1,0); np_m[1,1]= m(1,1); np_m[1,2]= m(1,2)
np_m[2,0]= m(2,0); np_m[2,1]= m(2,1); np_m[2,2]= m(2,2)
return np_m
Quando eu compilo o wrapper cython recebo esses erros
geom_gateway.cpp(2528) error C3861: '()': identifier not found
Isso corresponde ao primeiro uso de Matx33d :: operator (), que é quando acessando m (0,0) no código acima. Se eu olhar para a linha geom_gateway.cpp gerada 2528 eu recebo:
*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_pybuffernd_np_m.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_np_m.diminfo[0].strides, __pyx_t_7, __pyx_pybuffernd_np_m.diminfo[1].strides) = operator()(0, 0);
Eu não entendo este operador () (0, 0) lá sozinho no final da linha sem qualquer objeto !! Como isso é possível? Isso é um bug do Cython? ou a sintaxe que estou usando para o operador () está errada? Qualquer ajuda é apreciada!