Xavi, note that attributeValue is a const getter so you cannot use the returned reference to assign it. I suggest you add a new method: void setAttributeValue(unsigned i, const value_type & value) value_type & attribute = *(value_type *)_processingConfig->GetAttributeAsVoidPtr( i ) attribute = value; so you can call: config.setAttributeValue<std::string>(unsigned i, value)
A Dijous 26 Maig 2011 20:36:41, Xavier Serra Román va escriure: > 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 > > > > > 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@lists.clam-project.org > > > > > http://lists.clam-project.org/listinfo.cgi/clam-devel-clam-project. > > > > > org > > > > > > _______________________________________________ > > > clam-devel mailing list > > > clam-devel@lists.clam-project.org > > > http://lists.clam-project.org/listinfo.cgi/clam-devel-clam-project.org -- David García Garzón (Work) david dot garcia at upf anotherdot edu http://www.iua.upf.edu/~dgarcia _______________________________________________ clam-devel mailing list clam-devel@lists.clam-project.org http://lists.clam-project.org/listinfo.cgi/clam-devel-clam-project.org