Делает ли 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>

Ответы на вопрос(4)

Ваш ответ на вопрос