C++のテンプレート

今更,色々試してハマる.
テンプレート関数の引数に関数へのポインタを渡す時,関数へのポインタの型から返り値の型とか引数の型とかを推論して欲しいんだけど,って言う話.

template <class Ret(*)(Arg)>
Ret myfunc(Ret(*f)(Arg), Arg a){
  return f(a);
}

とか書いてみたんだけど,動かねー.

とよく考えると,こうだった:

template <class Ret, class Arg>
Ret myfunc(Ret(*f)(Arg), Arg a){
  return f(a);
}

こうすると,

int foo(int a){return a;}

みたいな関数があった場合,

myfunc(foo, 1);

みたいに呼べる.(myfuncとする必要がない.)

C++を普段書いている人には当たり前なんだろうなぁ.
こんなんで,1,2時間はまった.もうじじいなんだろうか.