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>

questionAnswers(4)

yourAnswerToTheQuestion