2017-03-27 4 views
0

Selon libcpp/complex.pxd ajoutant T-complex[T] est pris en charge:Cython: erreur en ajoutant complexe [double] pour doubler

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

Mais il ne fonctionne pas:

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

configuration.pyx:

À quelle idée faire?

déclaration de déménagement

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

sur cppclass et changer à

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

ressemble plus legimate mais ne fonctionne toujours pas.

+0

Je suis d'accord que c'est cassé. Je ne pense pas qu'il y ait un workround réalisable. Peut-être soumettre un rapport de bug à https://github.com/cython/cython/issues? – DavidW

+0

@DavidW Terminé, problème [# 1643] (https://github.com/cython/cython/issues/1643) – axil

+0

@AntonyHatchkins C'est la première fois que quelqu'un le fait quand je lui suggère de soumettre un rapport de bug :)! – DavidW

Répondre

2

Je l'ai fonctionné. Voir cython billet https://github.com/cython/cython/issues/1643

Il est une combinaison de mouvement

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

de définition de cppclass, changeant à

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

comme suggéré dans la question et @ l'idée de davidw de cimport *