Cython, похоже, не понимает, что метод sf::RenderTarget.clear()
может вызываться с разными аргументами и позволяет вызывать только последний объявленный вариант в .pxd.
Заголовочный файл SFML (источник):
class RenderTarget {
void clear(const Color& color = Color(0, 0, 0, 255));
}
Мой Cython .pxd:
cdef extern from 'SFML/Graphics.hpp' namespace 'sf' nogil:
cppclass CRenderTarget 'sf::RenderTarget':
void clear()
void clear(const CColor&)
cppclass CRenderWindow 'sf::RenderWindow' (CWindow, CRenderTarget):
...
Моя оболочка Cython:
cdef class RenderWindow(Window):
cdef CWindow* c
def __init__(self, ...):
self.c = new CRenderWindow()
...
def clear(self, Color color=None):
if color is None:
(<CRenderWindow*>self.c).clear() # The error points here
else:
(<CRenderWindow*>self.c).clear(color.c[0])
Ошибка компиляции: Call with wrong number of arguments (expected 1, got 0)
Поэтому я могу вызвать только вариант .clear(color)
, а не вариант с аргументом по умолчанию .clear()
. Что я делаю неправильно?
Моя реализация пытается следовать тому, что объяснено здесь, но я не могу заставить его Работа.
.clear(None)
, к сожалению, не компилируется. И я не делаю две функции, они определены в исходном коде SFML, и я пытаюсь сделать оболочку, чтобы они могли вызывать их из Python. - person HankMoody   schedule 09.07.2017clear
(в вашем файле pxd)? - person DavidW   schedule 09.07.2017