overloaded_function再び

関連項目
make_overloadを書いた http://fimbul.hateblo.jp/entry/2014/05/10/162852
再帰深度を抑えたtuple的コンテナの構築 http://fimbul.hateblo.jp/entry/2014/05/25/014112


前回記事(関連項目2つ目)でも登場した
テンプレートパラメータにKeyとValueを持つクラスを多重継承しておき、Keyを渡しながら*thisのアップキャストを行うことでValueを推論する型マップとでも呼ぶべきテク

( 簡単なサンプル http://melpon.org/wandbox/permlink/8ol3l0YibwsrAVd9 )

を用いて関数の引数型リストをKeyにして呼ぶべき関数を特定する方針でoverloaded_functionのようなものを書いてみました。

しかし、引数型リストをKeyにすると、暗黙の変換を経由して呼ばれる関数が特定出来ないという問題があることに気付き、なんとも使えない…。この方針だと再帰深度を対数に抑える事が出来ますが、現実的に数千のオーバーロードを書くことは無さそうなので、線形再帰してusingを使う方針の方が暗黙の変換の起こる関数も呼べて実用的ですね…。実用性は微妙ですが、お蔵入りにするのも勿体無いので何かしらの参考になればとコードを公開しておきます。

以下実装
https://gist.github.com/00966e2ef3a344143404