2

bullet.pxd:

cdef extern from "bullet/LinearMath/btVector3.h":
    cdef cppclass btVector3:
        btVector3(float, float, float) except +
        btVector3 operator+(const btVector3&, const btVector3&)

btmath.pyx:

cimport bullet as bt

cdef class Vector:

    cdef bt.btVector3* _this

    def __cinit__(self, float x=0, float y=0, float z=0):

        self._this = new bt.btVector3(x, y, z)


    def __add__(Vector self, Vector other):

        vec = Vector()
        del vec._this
        vec._this[0] = self._this[0] + other._this[0]

        return vec

btVector3.h の operator+ のプロトタイプ:

SIMD_FORCE_INLINE btVector3 
operator+(const btVector3& v1, const btVector3& v2);

タイトルにあるように、「'+' のオペランド タイプが無効です (btVector3; btVector3)」というメッセージが表示されます。Cython が参照渡しを処理する方法に何か関係があると思います。

どんな助けでも大歓迎です。

4

1 に答える 1

2

結局のところ、この場合、Cython は "this" パラメーターを暗黙的に扱うため、 bullet.pxd は次のようになります。

cdef extern from "bullet/LinearMath/btVector3.h":
    cdef cppclass btVector3:
        btVector3(float, float, float) except +
        btVector3 operator+(btVector3)

これを理解するのを手伝ってくれた Robert Bradshaw に大いに感謝します: https://groups.google.com/forum/#!topic/cython-users/8LtEE_Nvf0o

于 2013-05-06T21:51:48.783 に答える