Czy decltype w C ++ 11 czyni klon niepotrzebnym?
Theklon paradygmat jest używany do tworzenia kopii klasy pochodnej bez odrzucania do klasy bazowej. Niestety,clone
musi być zaimplementowane w każdej podklasie (lub w połączeniu z CRTP).
Czy jest szansa, że C ++ 11decltype
czyni to niepotrzebnym?
Nie sądzę, żeby poniższy kod faktycznie się kopiowałoriginal
, ale po prostu wskazuje na to odniesienie. Kiedy próbowałem użyćnew decltype(*original)
, Pojawia się błąd:error: new cannot be applied to a reference type
.
Jestclone
nadal sposób na przejście w C ++ 11? Czy jest jakiś nowy sposób użycia RTTI do skopiowania obiektu klasy pochodnej ze wskaźnika klasy bazowej?
<code>#include <iostream> struct Base { virtual void print() { std::cout << "Base" << std::endl; } }; struct Derived : public Base { int val; Derived() {val=0;} Derived(int val_param): val(val_param) {} virtual void print() { std::cout << "Derived " << val << std::endl; } }; int main() { Base * original = new Derived(1); original->print(); // copies by casting down to Base: you need to know the type of *original Base * unworking_copy = new Base(*original); unworking_copy->print(); decltype(*original) on_stack = *original; on_stack.print(); return 0; } </code>