Shallow\Deep copy
Hi, I'll do my best to explain my problem...
I have an data type that is wrapping a vector of pointers, currently I
have no control of the type that the vector holds and I need to be as
generic as I can (it's a part of a frame work).
naturally my vector is templated by the client.
I tried to think of a way to deep copy the vector into another -
without<- adding Clone function and such to the objects and I couldnt
think of one, I would be happy if anyone knows of a way...
Because I couldnt find a way to work without the Clone() AND I cant
force my clients to implement IClonable interface than I decided to
check If the object is descendant of IClonable and if it is than I
deep copy the object if not than I shallow copy the object, it seems
something like this:
void CompositorBase<Interface>::CopyItems(CompositorBase<Interface>
const& compositor)
{
for(CIterator iter = compositor.m_cData.begin();
iter != compositor.m_cData.end();
iter++)
{
Interface* newItem = (*iter);
IClonable* testForClonable = dynamic_cast<IClonable*>(newItem);
if (testForClonable)
{
IClonable* tmpClone = testForClonable->Clone();
if (tmpClone)
{
newItem = dynamic_cast<Interface*>(tmpClone);
}
}
this->AddItem(newItem);
}
}
Now... I dont like this chunk of code, Can any one think of better way
under this restrictions?
thank you!
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]