overloaded_functionの再帰深度を抑えた

高さ1のN分木の形ではなく、高さO(logN)の二分木の形に多重継承することで、usingがパック展開で書けない問題を回避しつつ、再帰深度をO(logN)に抑えました。関数の引数ではなく多重継承に適用しただけで、発想としては前回記事と同じです。type_tupleの要素アクセスもこれまでの記事で取り上げたtupleと同様の実装を用いているのでパフォーマンス的に悪くないはずです。
https://github.com/fimbul/shiro/blob/master/shiro/functional/overloaded_function.hpp

どちらかと言えば前々から二分木の形に多重継承出来れば問題が解決出来るなぁと思っていたところに先日の実装法が降ってきたので早速適用したという感じ。

出来るならば

template <typename... Types>
struct overloaded_function : Types... {
    using Types::operator()...;
};

と書きたいですね。

ドワンゴC++勉強会 #1
http://connpass.com/event/6560/
にて、LTさせて頂くことになりました。
10分ほど、普段ここで取り上げてきたこと(constexprなidiom等)を手短に話す予定です。