関数の戻り値の型
#include <iostream> template<typename F> struct functrait; //引数0個の関数の場合 template<typename R> struct functrait<R(*)()> { typedef R Ret; }; //実際に使ってみる template<typename F> void printret( F fn ) { typename functrait<F>::Ret ret = (*fn)(); std::cout << ret << std::endl; } int foo() { return 100; } int main( int, char** ) { printret(&foo); }
> 100
こんな感じ。