其他分享
首页 > 其他分享> > cython:将complex [double]添加到double时出错

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

作者:互联网

根据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&)

看起来更合法,但仍然无法正常工作.

解决方法:

我已经工作了.参见cython门票https://github.com/cython/cython/issues/1643

它是
移动

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

超出cppclass定义,将其更改为

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

如问题和@DavidW的cimport想法所建议的那样*

标签:complex-numbers,python,operator-overloading,cython
来源: https://codeday.me/bug/20191010/1884138.html