いや、単に、mpl::if_で関数を実装したクラスを選んで呼び出す
boost/smart_cast.hppが参考になるかも