> >
> > I'm using SIP to wrap a large C++ library
> 
> I wonder which one that is... :)

You guessed it :-). I have to say that SIP is helping greatly in the wrapping 
process and I'm genuinely impressed at how much functionality it's bringing.
 

> So it's not a bug, it's a
> conscious decision to do it that way. "Fixing" it would be a change of
> behaviour which I'm not willing to do for SIP4 - happy to change it for
> SIP5 though.
> 
> Phil

I don't know where you are with SIP5 - is there a nightly build I can download? 
This issue has a real impact on the code I am working with (actually, it 
crashes because of it). I've made a simple test project to demonstrate the 
issue because I think for us it means that using SIP's 'virtual' mechanism and 
SIP's inheritance mechanism become mutually incompatible. I'm sending you 
direct a tar file of the code, in a nutshell it is:

3 classes, C inherits B inherits A.

int A::getTypeId() {
        return 1;
};

int B::getTypeId() {
        return 2;
};

int C::getTypeId() {
        return 3;
};


In the sip files getTypeId() is only listed for A, and B and C pick it up via 
SIP's inheritance mechanism. If getTypeId() is not declared as virtual in the 
sip file then the following python code passes:

from ABC import C
assert(C().getTypeId() == 3)


However, if I declare the method as virtual in the sip file then the python 
test fails (1 is returned).

I can work around the issue here by either (1) redeclaring in sip all base 
class 'virtual' methods in all the derived classes or (2) munge the generated 
wrapper cpp code to call e.g. this->getTypeId() instead of A::getTypeId().

Regards
Tony
_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to