<div>Actually I made a small mistake, OpalLocalEndPoint has a GetMediaFormats implementation, but the issue remains.<br></div><div><br></div><div>
<div>class OpalLocalEndPoint : OpalEndPoint <br></div><div>{</div><div> virtual OpalMediaFormatList GetMediaFormats() const;</div><div>};</div></div><br><div class="gmail_quote">On Sat, Jul 2, 2011 at 5:39 PM, Demetrius Cassidy <span dir="ltr"><<a href="mailto:dcassidy36@gmail.com">dcassidy36@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div>I have a C++ class which is declared with pure virtual methods, but if I derive from this class in python and implement the pure virtual methods, I get an exception:</div>
<div>TypeError: pyvoip.opal.OpalPCSSEndPoint cannot be instantiated or sub-classed</div>
<div><br></div><div>My python class is declared as following:</div><div><br>class PCSSEndPoint(OpalPCSSEndPoint):<br> def __init__(self):<br> super(OpalPCSSEndPoint, self).__init__()<br> <br> def OnShowIncoming(self, connection):<br>
return True<br> <br> def OnShowOutgoing(self, connection):<br> return True<br> <br> def GetMediaFormats(self):<br> return []</div><div><br></div><div><br></div><div>SIP definitions:<br></div>
<div><br></div><div>class OpalPCSSEndPoint : OpalLocalEndPoint /Abstract/</div><div>{</div><div><br></div><div>/**Call back to indicate that remote is ringing.<br> If false is returned the call is aborted.<br><br> The default implementation is pure.<br>
*/<br> virtual PBoolean OnShowIncoming(<br> const OpalPCSSConnection & connection /NoCopy/ ///< Connection having event<br> ) = 0;<br><br> /**Call back to indicate that remote is ringing.<br> If false is returned the call is aborted.<br>
<br> The default implementation is pure.<br> */<br> virtual PBoolean OnShowOutgoing(<br> const OpalPCSSConnection & connection /NoCopy/ ///< Connection having event<br> ) = 0;<br></div><div>
<br>
</div><div>};</div><div><br></div><div>Now the base class of
OpalPCSSEndPoint
is also an ABC, as it derives from an ABC but does not re-define the pure virtual function:</div><div><br></div><div>class OpalLocalEndPoint : OpalEndPoint /Abstract/<br></div><div>{</div><div> ...</div><div>};</div><div>
</div><div>class OpalEndPoint /Abstract/</div><div>{</div><div>virtual OpalMediaFormatList GetMediaFormats() const = 0;</div><div>};</div><div><br></div><div>I tried removing /Abstract/ from OpalLocalEndPoint, but it made no difference.
Any idea what's wrong in this scenario? The only way this works, is if I subclass
OpalPCSSEndPoint
in C++ and then in Python create a class derived from my OpalPCSSEndPoint
subclass.</div><div><br></div>
</blockquote></div><br>