Я пытаюсь использовать библиотеку MPFR C ++, потому что я хотел бы иметь простые операторы (например, «+ =» или даже просто «+») для чисел MPFR.
Мой простой пример это следующее
cdef extern from "mpreal.h" namespace "mpfr":
cdef cppclass mpreal:
mpreal() except +
mpreal(const double) except +
mpreal& operator+=(const mpreal& v) except +
Однако Cython жалуется на
Error compiling Cython file:
------------------------------------------------------------
...
cdef extern from "mpreal.h" namespace "mpfr":
cdef cppclass mpreal:
mpreal() except +
mpreal(const double) except +
mpreal& operator+=(const mpreal& v) except +
^
------------------------------------------------------------
test_000.pyx:6:26: Overloading operator '+=' not yet supported.
Некоторые операторы упоминаются в https://cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html, чтобы иметь немного другой синтаксис, но "+ = Оператор "нигде не упоминается в inte rnet, он довольно простой и в то же время распространен, поэтому я запутался.
Мой вопрос довольно глупый: я где-то ошибся, или Правильно ли сообщение об ошибке в том смысле, что оператор "+ =" просто еще не поддерживается Cython? Другие операторы, такие как «=» (похоже) работают.
EDIT: User ead указал на что-то в sr c Cython (https://github.com/cython/cython/blob/5a8c984403ce73ac29f9e8b7c78ee5f0f4c608a3/Cython/Compiler/Parsing.py#L2834) который я понимаю как "+ =" просто не поддерживается.
Но глядя на https://github.com/cython/cython/blob/5a8c984403ce73ac29f9e8b7c78ee5f0f4c608a3/Cython/Compiler/Parsing.py#L2909, мне интересно, можно ли это легко расширить, и комментарии к коду действительно предполагают это? Может быть, я смогу разобраться сам и внести свой вклад, но если кто-нибудь знает, что происходит, я был бы рад услышать об этом.
elif s.sy == '=':
op += s.sy # +=, -=, ...
s.next()
if op not in supported_overloaded_operators:
s.error("Overloading operator '%s' not yet supported." % op,
fatal=False)
ВАЖНОЕ ИЗМЕНЕНИЕ: Обсуждение продолжается https://github.com/cython/cython/issues/3696, и, как кажется прямо сейчас, предложение ead будет добавлено / исправлено в Cython.