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

Shaheed Haque srhaque at theiet.org
Sun Jun 18 17:54:44 BST 2017


On 18 June 2017 at 14:59, Shaheed Haque <srhaque at theiet.org> wrote:
> On 15 June 2017 at 23:38, Phil Thompson <phil at riverbankcomputing.com> wrote:
>> 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,
>
> Here, I think, is one of those other cases:
>
> template <T>
> class KSharedPixmapCacheMixin: T, KLocalImageCacheImplementation
> {
> ...
> };
>
> The problem is that SIP does not like the use of T as a base class:
>
> ERROR: sip: ::T has not been defined while processing
> KGuiAddons/KGuiAddonsmod.sip


And in a similar vein again:


    template <Class>
    class SuperClass: SuperClassTrait<Class>
    {
%TypeHeaderCode
#include <AkonadiCore/Supertrait>
%End
        // Empty!
    };

causes:

ERROR: sip: tmp/AkonadiCore/Supertrait.sip:42: syntax error while
processing AkonadiCore/AkonadiCoremod.sip



> Thanks, Shaheed
>
>
>>
>> Phil
>>
>> _______________________________________________
>> PyQt mailing list    PyQt at riverbankcomputing.com
>> https://www.riverbankcomputing.com/mailman/listinfo/pyqt


More information about the PyQt mailing list