[PyQt] Templated classes with specialization in SIP
    Nate Reid 
    gnatty7 at hotmail.com
       
    Tue Oct  5 18:13:26 BST 2010
    
    
  
There may be syntax/programming errors here, but I was wondering if by 
specifying something like the following:
// blah.h
#ifndef BLAH_DEFINED
#define BLAH_DEFINED
#include <sstream>
template<typename T>
class Blah {
public:
   QString get(const T& v);
};
template<typename T>
QString Blah<T>::get(const T& v) {
   std::ostringstream s;
   s << "Value is: " << v;
   return QString(s.str().c_str());
}
// Specialization for 'int'
template<>
QString Blah<int>::get(const int& v) {
   std::ostringstream s;
   s << "Value (int) is: " << v;
   return QString(s.str().c_str());
}
#endif
// blah.sip
%Module blah 0
template <typename T>
class Blah {
%TypeHeaderCode
#include "blah.h"
%End
public:
   QString __getitem__(const T& val);
%MethodCode
   sipRes = new QString(sipCpp->get(*a0));
%End
};
You could produce a wrapped class that would work like follows:
>>> import blah
>>> b = blah.Blah()
>>> str(b['hello'])
Value is: hello
>>> str(b[3.2])
Value is: 3.2
>>> str(b[10])
Value (int) is: 10
It seems like without explicit typedefs, SIP won't know how to generate 
the templated wrapped Blah.  But, is there a preferred way to get the 
above interface with minimal code without necessarily resorting to using 
%MappedTypes?
Thanks,
-Nate
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20101005/4f161af4/attachment-0001.html>
    
    
More information about the PyQt
mailing list