great, thanks Jim. I think I'll get it now. On Wednesday 24 September 2003 09:39, Jim Bublitz wrote: > On Wednesday September 24 2003 10:04, Patrick Stinson wrote: > > in progression: > > > > Does the %ConvertToSubClassCode directive require some sort of > > class identification mechanism to be written into the original > > cpp library code? QEvent returns an enumerated value in > > type(), as well ass QApplication and some others, and QObject > > has QObject::className() that returns a string identifier. > > that can be used in conjuction with sipMapStringToClass() and > > a sipStringTypeClassMap struct. > > > > Does this mean I have to modify my cpp library to add some > > sort of class identifier for classs/subclasses if I want > > polymorphic return values in my python functions? > > I had the same question, but unfortunately I posted it to Phil > twice rather once to him and once to the list. Here's our > exchange: > > On Monday 22 September 2003 4:47 pm, you wrote: > > On Monday September 22 2003 02:03, Phil Thompson wrote: > > > > media = PK.CreateMediaLayer("./track.ogg") > > > > while not media.AtEnd(): > > > > media.Read() > > > > > > What do you get when you "print media"? If you get a > > > PK_MediaLayer instance then maybe you haven't implemented > > > %ConvertToSubClassCode properly. > > ===== my post ======= > > > From copying PyQt code, I understand (I think) how to implement > > %ConvertToSubClassCode for hierarchies like QObject or QEvent - > > but those both have methods that return some kind of type > > identifier (like QObject::className() ). > > > > If a hierarchy of classes *doesn't* have a method like that, > > how do you do the %ConvertToSubClassCode block? Use the C++ > > RTTI typeid() function? > > > > eg: > > > > class A {}; > > class B : public A {}; > > > > --- > > > > %HeaderCode > > #include <typeinfo> > > %End > > > > %ConvertToSubClassCode > > static sipStringTypeClassMap map[] = { > > {sipName_B, &sipClass_B}, > > ... > > }; > > > > sipClass = sipMapStringToClass( > > typeid (*sipCpp), > > map, sizeof (map)/sizeof (map[0])); > > %End > > > > Would that work? I'm assuming sipCpp is already of the > > subclass' type (or sipCpp->className () wouldn't work?), and > > this is just fixing the corresponding PyObject's type? > > ===== Phil's reply ======= > > There are potential problems there because the C++ instance might > be "QObject" or "sipQObject", but that's just a case of setting > the table up properly. It doesn't really matter how it is > implemented, so long as a valid PyObject * is returned that is > actually a Python class object.
_______________________________________________ PyKDE mailing list [EMAIL PROTECTED] http://mats.imk.fraunhofer.de/mailman/listinfo/pykde