struct base{ virtual ~base(){} virtual void Foo()=0;};struct der1: base{ virtual ~der(){} virtual void Foo(){}};struct der2: base{ virtual ~der2(){} virtual void Foo(){}};void Foo(base* ptr){ //как мне получить копию объекта? base* copy = ?}int main(){ if( random(0,1)==0) base* ptr = new Der1; else base* ptr = new Der2; Foo(ptr); // <--- Ups....}
void Foo(base* ptr){ //как мне получить копию объекта? base* copy = ?}}
C++ (Qt)virtual base * clone( void ) const;
virtual base * clone( void ) const { return new Der};
struct base{ virtual ~base(){} virtual void Foo()=0;};struct der1: base{ virtual ~der(){} virtual void Foo(){}};struct der2: base{ virtual ~der2(){} virtual void Foo(){}};void Foo( smart<base>& obj){ //как мне получить копию объекта? //может создать независимую копию независимо от того, определен ли в объекте-ресурсе метод Clone smart<base> copy = obj.Clone(); }int main(){ smart<base> obj; if( random(0,1)==0) obj.make<Der1>(); else obj.make<Der2>(); Foo(obj); }