(とりわけ)関数のようなオブジェクトを引数として指定された戻り型を持つ(テンプレート化された)関数を提供したいと思います。理想的には、明示的なテンプレート引数なしでその関数を呼び出せるようにしたいと思います。
これまでに試しました:
template<A, B, F>
B some(A a, F f) { return f(a); }
template<A, B>
B some(A a, B (*f)(A)) { return some<A, B, B (*)(A)>(a, f); }
テンプレート引数を完全に推測できるようにするためのオーバーロードがある場合、少なくとも関数ポインターについては。にはメンバーstd::unary_function
が含まれておらず、としては適していないため、テンプレートを特殊化できないようです。operator()
F
さらに、FにFを持たせたいことをコンパイラーに通知できないため、一般的にファンクターの解決策はないようですB operator()(A)
。それとも、そのようなダックタイピングはどういうわけか可能ですか?