1

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)

所以我只能调用 whe.clear(color)变量而不是带有默认参数的变量.clear()。我做错了什么?

我的实现试图遵循这里解释的内容,但我无法让它工作。

4

1 回答 1

0

我为类似情况下的方法提供了别名(C 名称)。在这种情况下

cdef extern from 'SFML/Graphics.hpp' namespace 'sf' nogil:
    cppclass CRenderTarget 'sf::RenderTarget':
        void clear0 "clear" ()
于 2017-07-09T16:23:29.133 回答