Cython:将复合体[双精度]添加到双精度时出错



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

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

但它不起作用:

a.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])

setup.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&)

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

我已经让它工作了。查看赛通门票 https://github.com/cython/cython/issues/1643

它是移动

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

在 cppclass 定义之外,将其更改为

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

正如问题和@DavidW对cimport *的想法中所建议

的那样

最新更新