func()をコールしても、ポリシークラスによって膨張クラス用インスタンスと収縮クラス用インスタンスをジェネレートし、インスタンス毎にその挙動を変えています。ポリモーフィズムを静的に実現しています。ポリシークラスは、コンパイル時にジェネレートするので実行時のオーバーヘッドはありません。ポリシークラスによるジェネリックプログラミングは、共通メインルーチンをひとつ定義するだけで、複数のインスタンス用にジェネレートするので便利な仕組みです。理想に近い形を実現できましたが、もう少し気になることがあります。4K画像などの大画像を処理する場合は、やはりオーバーヘッドが気になります。キーワードを付けてみました。インライン展開できました。当初の重複のあるコードとほぼ同じコードを生成することができました。画像膨張・収縮のような簡単なコードの場合、無理して重複コードを除去する必要はないと考えます。複雑なコードだった場合、ジェネリックプログラミングによる実装を選択するかどうかは、ソースコードの保守とパフォーマンスのトレードオフかもしれません。