<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
<font style="" face="Courier New">There may be syntax/programming errors here, but I was wondering if by
specifying something like the following:
</font><font style="" face="Courier New"><br></font>
<font style="" face="Courier New"><br></font><font style="" face="Courier New">// blah.h
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">#ifndef BLAH_DEFINED
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">#define BLAH_DEFINED
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">#include <sstream>
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">template<typename T>
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">class Blah {
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">public:
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New"> QString get(const T& v);
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">};
</font><font style="" face="Courier New"><br></font>
<font style="" face="Courier New"><br></font><font style="" face="Courier New">template<typename T>
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">QString Blah<T>::get(const T& v) {
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New"> std::ostringstream s;
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New"> s << "Value is: " << v;
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New"> return QString(s.str().c_str());
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">}
</font><font style="" face="Courier New"><br></font>
<font style="" face="Courier New"><br></font><font style="" face="Courier New">// Specialization for 'int'
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">template<>
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">QString Blah<int>::get(const int& v) {
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New"> std::ostringstream s;
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New"> s << "Value (int) is: " << v;
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New"> return QString(s.str().c_str());
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">}
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">#endif
</font><font style="" face="Courier New"><br></font>
<font style="" face="Courier New"><br></font><font style="" face="Courier New">// blah.sip
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">%Module blah 0
</font><font style="" face="Courier New"><br></font>
<font style="" face="Courier New"><br></font><font style="" face="Courier New">template <typename T>
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">class Blah {
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">%TypeHeaderCode
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">#include "blah.h"
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">%End
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">public:
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New"> QString __getitem__(const T& val);
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">%MethodCode
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New"> sipRes = new QString(sipCpp->get(*a0));
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">%End
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">};
</font><font style="" face="Courier New"><br></font>
<font style="" face="Courier New"><br></font>
<font style="" face="Courier New"><br></font><font style="" face="Courier New">You could produce a wrapped class that would work like follows:
</font><font style="" face="Courier New"><br></font>
<font style="" face="Courier New"><br></font><font style="" face="Courier New">>>> import blah
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">>>> b = blah.Blah()
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">>>> str(b['hello'])
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">Value is: hello
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">>>> str(b[3.2])
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">Value is: 3.2
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">>>> str(b[10])
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">Value (int) is: 10
</font><font style="" face="Courier New"><br></font>
<font style="" face="Courier New"><br></font><font style="" face="Courier New">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?
</font><font style="" face="Courier New"><br></font>
<font style="" face="Courier New"><br></font><font style="" face="Courier New">Thanks,
</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">-Nate
</font> </body>
</html>