默认方法参数不起作用
Default method arguments don't work
Cython 似乎无法识别 sf::RenderTarget.clear()
方法可以使用不同的参数调用,并且只允许调用 .pxd 中最后声明的变体。
SFML 的头文件(source):
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)
所以我只能调用 whe .clear(color)
变体,而不是带有默认参数 .clear()
的变体。我做错了什么?
我的实现试图遵循 explained here,但我无法让它工作。
我已经为类似情况下的方法提供了别名 (C names)。在这种情况下
cdef extern from 'SFML/Graphics.hpp' namespace 'sf' nogil:
cppclass CRenderTarget 'sf::RenderTarget':
void clear0 "clear" ()
Cython 似乎无法识别 sf::RenderTarget.clear()
方法可以使用不同的参数调用,并且只允许调用 .pxd 中最后声明的变体。
SFML 的头文件(source):
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)
所以我只能调用 whe .clear(color)
变体,而不是带有默认参数 .clear()
的变体。我做错了什么?
我的实现试图遵循 explained here,但我无法让它工作。
我已经为类似情况下的方法提供了别名 (C names)。在这种情况下
cdef extern from 'SFML/Graphics.hpp' namespace 'sf' nogil:
cppclass CRenderTarget 'sf::RenderTarget':
void clear0 "clear" ()