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); ... };