[PyQt] SIP template-based class with argument having default constructor as default value

Phil Thompson phil at riverbankcomputing.com
Thu Jun 15 23:38:44 BST 2017


On 13 Jun 2017, at 3:16 pm, Denis Rouzaud <denis.rouzaud at gmail.com> wrote:
> 
> 
> Hi all,
> 
> Title says it all ;)
> 
> I think there is an issue on how SIP handles the default value argument for template-based classes.
> SIP don't replaces the T var by the implemented  base class constructor. See below.
> 
> Let's say I have
> 
> template <typename T>
> class Base
> {
>   pubic:
>     Base( const T &epoch = T()) : mEpoch( epoch ){}
>   private:
>     T mEpoch;
> }
> 
> typedef Base< QDate > MyDate;
> typedef Base< QDateTime > MyDateTime;
> 
> 
> Here is the SIP code generated:
> 
> static void *init_type_MyDate(sipSimpleWrapper *, PyObject *sipArgs, PyObject *sipKwds, PyObject **sipUnused, PyObject **, PyObject **sipParseErr)
> {
>     MyDate *sipCpp = 0;
>     {
>         const QDate& a0def = T();
>         const QDate* a0 = &a0def;
>         int a0State = 0;
> ......
> 
> 
> I get an error: 
> use of undeclared identifier 'T'
>      in   const QDate& a0def = T();
> 
> 
> Does someone confirm?
> Is there a workaround?

Tonight's snapshot should handle this use case - but you may find others that will require more work.

Phil



More information about the PyQt mailing list