>>233
Argsを調べて適当にディスパッチしてやれば良い。例えば引数の数で分けるなら、
template <typename Args>
struct sig
{
  typedef typename boost::mpl::if_c<
    boost::tuples::length<Args>::value == 2, /* 関数オブジェクトと引数一つで合計2 */
    int,
    void>::type type;
};

試してないけど、typename Args::inheritedでconsリストを得て、
それに対して部分特殊化でパターンマッチすることもできるはず。