[clam-devel] ipyclam: trouble with ProcessingConfigs

Pau Arumi pau.arumi at barcelonamedia.org
Wed May 25 11:39:39 PDT 2011


Check the Component interface. Maybe it is called Clone() or DeepCopy().
P
-- 
Sent on the road

----- Mensaje original -----
> On May 25, 2011, at 7:48 PM, David García Garzón wrote:
> 
> > On Wednesday 25 May 2011 19:09:23 Xavier Serra Román wrote:
> > > Hi guys,
> > > I'm now at the part of ipyclam dealing with configurations and I've
> > > run into some trouble, I defined a c++ class to wrap into python with
> > > boost.python that holds a processingconfig.
> > > 
> > > I need to create the processingconfig in the class from a copy of
> > > another one so I've defined: ConfigurationProxy(const
> > > CLAM::ProcessingConfig & prototype)
> > >     {
> > >         _processingConfig = new CLAM::ProcessingConfig(prototype);
> > >     }
> > > this, obviously. doesn't work because abstract classes cannot be
> > > allocated but I don't know what else to do.
> > 
> > Use the Component::Species() virtual method. It is redefined in
> > subclasses   (including ProcessinConfig's derivatives) in a way that it
> > returns an object   of the same class than the receiver. Not a copy,
> > just the default constructed   one.
> 
> How do you call it? I don't seem to be able to make it work, I've tried
> from prototype.Species() to CLAM::ProcessingConfig::Species(prototype)..
> 
> > 
> > Be carefull on the code below, if you ned the default constructor (do
> > you need   it?) initialize all the members.
> > 
> > Be also carefull with the copy constructor (generated by default). The
> > default   copy constructor copies all members, in this case will copy
> > the pointer and   you will double delete it on the destructor. This
> > might happen not just in   assignments but also when passing it as
> > parameter or returning not as   reference,   and it may not be you but
> > maybe boost::python. So my suggestiong   is to implement it private and
> > assert false inside, so, at least if   boost::python uses it you will
> > be notified at compilation or runtime.
> > 
> > 
> > > The complete code of the class is:
> > > class ConfigurationProxy
> > > {
> > > public:
> > >     CLAM::ProcessingConfig * _processingConfig;
> > >     ConfigurationProxy() {}
> > >     ConfigurationProxy(const CLAM::ProcessingConfig & prototype)
> > >     {
> > >         _processingConfig = new CLAM::ProcessingConfig(prototype);
> > >     }
> > >     ~ConfigurationProxy()
> > >     {
> > >         delete _processingConfig;
> > >     }
> > > };
> > > 
> > > Thanks!
> > > _______________________________________________
> > > clam-devel mailing list
> > > clam-devel at lists.clam-project.org
> > > http://lists.clam-project.org/listinfo.cgi/clam-devel-clam-project.org
> 
> _______________________________________________
> clam-devel mailing list
> clam-devel at lists.clam-project.org
> http://lists.clam-project.org/listinfo.cgi/clam-devel-clam-project.org

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.clam-project.org/pipermail/clam-devel-clam-project.org/attachments/20110525/1e7391d7/attachment-0003.htm>


More information about the clam-devel mailing list