関数を作る必要がなくなります。派生クラスはこんな風になる。継承するクラス(object)が固定されてしまいます。関数を継承ツリーにインジェクトするクラスは,他の継承ツリーでも使いまわしたいので,基底クラスもテンプレート引数として渡します。しておけば,派生クラスをテンプレートにして,基底クラスを切り替えることもできるようになります。使うときは,こんな風に使う。クラスはライブラリ内でプライベートになります。if-文がなくなりました。ある利点を強調した設計は,それに基づく不利な点も踏まえておかなくちゃいけません。この設計の場合,もっとも不利になるのは,クラス生成の関数とキーの組み合わせを動的に登録する必要がある点です。実行時にあらかじめ(プログラマからすれば)決まりきったバインディング(マッピング)を行うのは無駄です。静的にキーと生成関数のマップを定義できればいいんですけれど,なかなか難しいところ。生成時のコストを考えると,たくさんの派生クラスを登録すると,ややもたつくかもしれません。十分スケーラビリティがあります。使いどころが難しいけれども,アプリケーション起動時にユーザオプションの設定を読み込む場合なんかはいいかもしれない。外部から生成関数を登録できるようにしたので,拡張性がある程度あります。読み込みクラスを定義できます。動的にバインドする仕組みも作れると思う。メソッドパターンを利用する意味があまりありません。名前レベルで派生クラスがクライアントから見えてしまっていると,どちみち再コンパイルが必要になりがちで,内部実装を隠蔽しにくくなるからです。それなりに応用範囲が考えられそうな感じ。