c++ Cython中显式默认的比较运算符

aemubtdh  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(185)

我想用Cython Package 一个有比较运算符的C++结构:

struct myStruct {
  float a;
  float b;
  float c;
  float d;
  bool operator==(const myStruct &myStr) const = default;
};

我正在努力弄清楚如何在Cython中执行操作符重载。

cdef struct myStruct:
    np.float32_t a;
    np.float32_t b;
    np.float32_t c;
    np.float32_t d;
   # Operator overload???

我没有在struct的cython定义中指定运算符重载,构建成功了。我以为它会失败并出现错误。

htrmnn0y

htrmnn0y1#

Cython只关心比较是否存在,而不关心比较是如何生成的,因此,不要告诉它有关= default的信息

bool operator==(const myStruct &myStr) const

我没有在结构体的cython定义中指定运算符重载,构建成功了
不告诉Cython的唯一后果是您将无法在Cython中使用该操作符。
您遗漏了两件事。第一个运算符只能附加到cppclass,而不能附加到struct,因此请更改:

cdef struct myStruct:

cdef cppclass myStruct:

从Cython的Angular 来看,它实际上是用class还是struct定义的并不重要--这只影响C++中的默认可访问性。
第二,Cython在默认情况下不知道bool

相关问题