小能豆

Cython:将 complex[double] 添加到 double 时出错

py

根据libcpp/complex.pxd添加T支持complex[T]

    complex[T] operator+(complex[T]&, T&)
    complex[T] operator+(T&, complex[T]&)

但它不起作用:

一个.pyx:

# distutils: language = c++

cimport libcpp.complex

def f():
    libcpp.complex.complex[double](1,2) + libcpp.complex.complex[double](2,3) # ok
    libcpp.complex.complex[double](1,2) + 5. # Cannot assign type 'double' to 'complex[double]' 
    5. + libcpp.complex.complex[double](1,2) # Invalid operand types for '+' (double; complex[double])

设置.pyx:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = "demo",
    ext_modules = cythonize('a.pyx'),
)

知道如何修复它吗?

搬家申报

complex[T] operator+(complex[T]&, T&)

并将cppclass其更改为

complex[T] operator+[T](complex[T]&, T&)

看起来更合法但仍然不起作用。


阅读 17

收藏
2024-12-12

共1个答案

小能豆

它是移动的结合

complex[T] operator+(complex[T]&, T&)
超出 cppclass 定义,将其更改为

complex[T] operator+T
正如问题中所建议的以及@DavidW 的想法cimport *

2024-12-12