[clam-devel] ipyclam: trouble with ProcessingConfigs

Xavier Serra Román xvr.serra at gmail.com
Thu May 26 11:36:41 PDT 2011


Hi guys..
I have another issue. How do you set new values to a dynamictype attribute?
I've seen clam code such as:
	ConcreteString & value = *(ConcreteString *)object.GetAttributeAsVoidPtr(attribute);
	value = input->toPlainText().toLocal8Bit().constData();

but in my code I do:
	std::string old = config.attributeValue<std::string>(i);
	old = value;
with value being passed as const std::string& and attributeValue<type> being:
	*(type *)_processingConfig->GetAttributeAsVoidPtr( i )
and nothing changes. What am I doing wrong?

Thanks!

PS: I hate pointers

On May 25, 2011, at 8:39 PM, Pau Arumi wrote:

> 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/20110526/b2dbbe92/attachment.html>


More information about the clam-devel mailing list