Cython C++包装器操作程序()重载

2024-10-02 18:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

与我之前的问题有关。 Using Cython to wrap a C++ class that uses OpenCV types as parameters

现在我又犯了一个错误。我的OpenCV类型matx3d的cython包装代码如下所示:

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)

然后我定义了一个函数来将matx3d复制到numpy数组。在

^{pr2}$

当我编译cython包装器时,我得到了以下错误

geom_gateway.cpp(2528) error C3861: '()': identifier not found

这对应于第一次使用Matx33d::operator(),即在上面的代码中访问m(0,0)。 如果我看看生成的几何图形_网关.cpp2528号线我得到:

  *__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);

我不明白这个运算符()(0,0)只在行尾没有任何对象!!这怎么可能?这是赛顿虫吗?或者我对operator()使用的语法是错误的吗? 感谢任何帮助!在


Tags: 代码core错误npoperatoropencvcvcython
1条回答
网友
1楼 · 发布于 2024-10-02 18:21:47

好吧,我不知道为什么会出现这个错误,对我来说,它看起来像是语法

double& operator()(int i, int j)

应该可以,但是不行。这个语法适用于其他运算符,如+,-,/,*

另一种有效的替代语法如下:

^{pr2}$

然后在cython代码中,当我们想使用operator()(i,j)时,我们调用get(i,j)

相关问题 更多 >