Делает ли Cll 11 decltype ненужным клон?
клон Paradigm используется для создания копии производного класса без приведения к типу базового класса. К несчастью,clone
должен быть реализован в каждом подклассе (или с миксином с CRTP).
Есть ли шанс, что C ++ 11decltype
делает это ненужным?
Я не думаю, что код ниже на самом деле копируетoriginal
, но просто указывает на ссылку. Когда я пытался использоватьnew decltype(*original)
Я получаю ошибку:
error: new cannot be applied to a reference type
.
Являетсяclone
все еще путь в C ++ 11? Или есть какой-то новый способ использовать RTTI для копирования объекта производного класса из указателя базового класса?
<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>