template<typename T>
class function<T()>{/******/};
template<typename T, typename U>
class function<T(U)>{/******/};
template<typename T, typename U, typename V>
class function<T(U,V)>{/******/};
;
とかやってんじゃないの
知らないけど