[PyQt] SIP newbie question (%MethodCode oddity)
Jim Crowell
jaclists at mailbolt.com
Tue Jan 8 17:47:13 GMT 2008
Hi all,
I'm fiddling with SIP 4.7.3 on XP for a non-Qt-related project. As a
learning exercise I tried porting the Fraction example at
<http://www.panix.com/~elflord/unix/siptute/> to SIP 4. Got it working
to a first approximation, but there's a bit that puzzles me: sipCpp
doesn't always get defined in %MethodCode blocks where it looks like it
should.
Here's the working .sip code for two methods:
float __float__();
%MethodCode
sipRes = (double)sipCpp->numerator() / sipCpp->denominator();
%End
Fraction __add__( Fraction );
%MethodCode
sipRes = new Fraction(*a0 + *a1);
%End
i.e. in the latter case sipCpp is not defined, but that same
self-as-c++-object pointer resides in a0. Can anyone tell me why?
Thanks,
-Jim C.
(complete .sip file below)
%Module Frac 0
%ModuleHeaderCode
#include <frac.h>
%End
int gcd(int, int);
class Fraction {
public:
Fraction(int , int=1 );
Fraction(const Fraction&);
int numerator() const;
int denominator() const;
SIP_PYOBJECT __str__();
%MethodCode
std::string res = sipCpp->toString();
sipRes = PyString_FromString( res.c_str() );
%End
float __float__();
%MethodCode
sipRes = (double)sipCpp->numerator() / sipCpp->denominator();
%End
Fraction __add__( Fraction );
%MethodCode
sipRes = new Fraction(*a0 + *a1);
%End
Fraction __add__( long );
%MethodCode
Fraction f1( a1, 1 );
sipRes = new Fraction(*a0 + f1);
%End
Fraction __sub__( Fraction );
%MethodCode
sipRes = new Fraction(*a0 - *a1);
%End
Fraction __sub__( long );
%MethodCode
Fraction f1( a1, 1 );
sipRes = new Fraction(*a0 - f1);
%End
Fraction __mul__( Fraction );
%MethodCode
sipRes = new Fraction(*a0 * *a1);
%End
Fraction __mul__( long );
%MethodCode
Fraction f1( a1, 1 );
sipRes = new Fraction(*a0 * f1);
%End
Fraction __div__( Fraction );
%MethodCode
sipRes = new Fraction(*a0 / *a1);
%End
Fraction __div__( long );
%MethodCode
Fraction f1( a1, 1 );
sipRes = new Fraction(*a0 / f1);
%End
};
More information about the PyQt
mailing list