[PyQt] Re: SIP errors: class inherits from std::list

Jim Bublitz jbublitz at nwinternet.com
Mon Sep 3 16:32:33 BST 2007


On Monday 03 September 2007 02:30, Ovidiu Ciule wrote:
> Hello,
>
> This is a relaunch of the earlier mail. I have found a work around: I
> define AccountList as a MappedType, still std::list<Account>, but not
> a template. The sip file includes %ConvertToTypeCode and
> %ConvertFromTypeCode  This is messy though. So I'm still hoping
> someone (Phil?) could clear the template issue. Oh, and the typedef
> problem.
>
> For reference, here's the original text:
> I have a class, AccountList, that inherits from std::list. When trying
> to generate bindings for it, SIP reports errors. I'm using SIP 4.5 on
> Ubuntu. I'm downloading SIP 4.7 now, but I don't think it'll help, as
> the change log doesn't mention anything relevant about templates.
>
> Here's the the .sip file:
> AccountList.sip
> class AccountList : std::list<Account> {
> %TypeHeaderCode
> #include <coipmanager_base/account/AccountList.h>
> %End
> public:
> ... various boring methods
> };
>

One way to handle it is to ignore the inheritance:

class AccountList
{
  ...
};

and the then add the Python list methods (__len__, __setItem__, __del__, slice 
operations, etc) with handwritten code. You can steal it all from PyQt - for 
example sip/QtCore/qstringlist.sip (or sip/qt/qstringlist.sip in PyQt3), 
which is a similar class to yours. 

You can also include any methods that AccountList has - even those inherited 
from std::list if they make sense to include. sip just won't automatically 
include std::list's methods in this case.

AccountList then becomes effectively a subclass of Python's list class, which 
is generally more comfortable for Python programmers anyway.

Jim



More information about the PyQt mailing list