¿El decltype de C ++ 11 hace que el clon sea innecesario?

losclon paradigma se usa para hacer una copia de una clase derivada sin convertir al tipo de clase base. Desafortunadamente,clone debe implementarse en cada subclase (o con una mezcla con CRTP).

¿Hay alguna posibilidad de que C ++ 11decltype hace esto innecesario?

No creo que el siguiente código en realidad copiaoriginal, pero simplemente apunta una referencia a ella. Cuando traté de usarnew decltype(*original), Me sale un error:error: new cannot be applied to a reference type.

Esclone ¿Sigue siendo el camino a seguir en C ++ 11? ¿O hay alguna forma nueva de usar RTTI para copiar un objeto de clase derivado desde un puntero de clase base?

<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>

Respuestas a la pregunta(4)

Su respuesta a la pregunta