clone alone

http://www.two-sdg.demon.co.uk/curbralan/papers/accu/CloneAlone.pdf
なるほどねぇ。

template <typename Derived, typename Base>
Cloner : public Base
{
public:
  virtual Base* Clone() const
  {
    return new Derived(static_cast<Derived&>(*this));
  }
};
class Rectangle : public Cloner<Rectangle, Graphic>
{
public:
  Rectangle(const Rectangle& org);
  ...
};

class Ellipse : public Cloner<Ellipse, Graphic>
{
public:
  Ellipse(const Ellipse& org);
  ...
};