[PyKDE] SIP and overloaded non-pure virtual functions

Paul F. Kunz Paul_Kunz at SLAC.Stanford.EDU
Thu May 29 02:16:00 BST 2003


   In my PlotterBase.zip file I have

class PlotterBase
{

public:

  PlotterBase ( const std::string & );
  void setRange ( const std::string &, double, double );
  virtual void setBinWidth ( const std::string &, double );

In the C++ code there's an implementation that is overridden by a
number of derived classes of PlotterBase.   The Python user gets his
handle on them via 

class DisplayController
{

public:

  static DisplayController * instance ();
  PlotterBase * createDisplay ( const std::string &, 
                                const NTuple &, 
                                const std::vector<std::string> & ) const;

Where the Python class will have a pinter to a C++ derived class of
PlotterBase.

The SIP generated code for setBinWidth member function contains...

		PlotterBase *sipCpp;

		if (sipParseArgs(&sipArgsParsed,sipArgs,"mM1d",sipThisObj,sipClass_PlotterBase,&sipCpp,sipConvertTo_std_string,&a0,&a0IsTemp,&a1))
		{
			Py_BEGIN_ALLOW_THREADS
			sipCpp -> PlotterBase::setBinWidth(*a0,a1);
			Py_END_ALLOW_THREADS

The C++ call to setBinWidth is scoped, the the virtual function table
of the derived class is not used.

   Is this a know bug in SIP code generation?




More information about the PyQt mailing list