Template Method in Generic Programming

http://thread.gmane.org/gmane.comp.lib.boost.devel/120575
http://thread.gmane.org/gmane.comp.lib.boost.user/9664
本当,これどうするんだろ・・・.

デザインパターンで言うところのTemplate Methodのhookを汎用プログラミングの文脈でどう呼ぶか/どうカスタマイズするか

swap

swapに関して言えばそもそも各種アルゴリズムの実装で(ユーザ定義型に対してカスタマイズした)swapが呼ばれる保証がない

何故hookを自由関数で提供するのか

  • ユーザ定義型に対するカスタマイズ性
  • 組み込み型に対する適用可能性

何故,本来の名前空間オーバーロードを導入する方法がダメなのか?

  • オーバーロードを許さないclosedなscope (クラスやstd名前空間)の存在
  • free template parameter
  • 関数がオーバーロードされていないことに依存したコードの存在(既存コードの破壊)
  • primary templateとの強い関係を持ったコードの存在(既存コードの破壊)
  • 2-phase lookup周りの問題?(order dependency?)

http://groups.google.com/groups?q=g:thl346365507d&dq=&hl=ja&lr=&ie=UTF-8&c2coff=1&selm=8dk9h7%245nd%242%40weber.techno-link.com&rnum=54

カスタマイズの方法の問題

  • クラステンプレートの静的メンバ関数に委譲する方法
  • unqualified callによってADLを有効にする方法
クラステンプレートの静的メンバ関数に委譲する方法

欠点は以下.

  • 構文が複雑
  • 正確な一致を必要とする
  • 常にprimary templateを必要とする(couplingの問題)
  • 名前空間に対する間接的な依存
unqualified callによってADLを有効にする方法

欠点は以下.

  • 組み込み型に対するカスタマイズ性の欠如
  • 潜在的な名前衝突の危険性(一定の自由関数に対する暗黙の強制・全名前空間における名前の汚染)

一度hookを公開するともはや1つのクラス・1つの名前空間の制御下にとどまらなくなる