>>129
childrenに対する操作の一部を共通化したいだけなら、
こんな感じでCompositeに共通処理を集めるだけじゃ駄目かね。

template<class Child> class Composite { /* 共通処理 */ };
class Leaf { };
class Composite2 : public Composite<Leaf> { /* Leafだけの処理 */ };
class Composite1 : public Composite<Composite2> { /* Composite2だけの処理 */ };