[Qgis-developer] Template programming in QGIS

GOO Creations goocreations at gmail.com
Fri May 13 06:04:21 EDT 2011


No, the constructor is available and correct.
If this wasn't the case, the code wouldn't have compiled when I remove 
the templates and replace it with int.

On 2011/05/13 11:58 AM, Martin Dobias wrote:
> On Fri, May 13, 2011 at 9:32 AM, GOO Creations<goocreations at gmail.com>  wrote:
>> Hi all
>>
>> I'm currently writing C++ code that I want to use via Python with SIP. The
>> following is a skeleton for my code:
>>
>> template<class T>
>> class MyClass
>> {
>>      MyClass(QString s);
>>      T* calculate();
>> }
>>
>> class B
>> {
>>      B();
>>      void doStuff();
>> }
>>
>> void B::doStuff()
>> {
>>      MyClass<int>  var("");
>>      int *var2 = var.calculate();
>> }
>>
>> The only class I've included in my SIP file is class B (and not class A).
>> Everything compiles correctly, but when QGIS starts, I get a Python error:
>>
>>    File "/home/goocreations/apps/share/qgis/python/qgis/utils.py", line 283,
>> in _import
>>      mod = _builtin_import(name, globals, locals, fromlist, level)
>> ImportError: /home/goocreations/apps/lib/libqgis_mylib.so.1.7.0: undefined
>> symbol: _ZN15MyClassIiEC1E7QString
> > From the error I would expect that the body of the MyClass(QString s)
> constructor is missing: you have only declared it.
>
>
>> So, I've though that creating a SIP binding for MyClass may resolve the
>> issue, but I can't figure out how I would use templates in SIP.
> SIP refers to template classes as "mapped types". Here you can find
> some documentation:
> http://www.riverbankcomputing.co.uk/static/Docs/sip4/directives.html#directive-%MappedType
>
> Regards
> Martin
>



More information about the Qgis-developer mailing list