など、関数オブジェクトの引数を取るC++ 11テンプレート関数:推進
int succ(int i) { return i+1; }
:
template <typename F, typename T>
auto foo(F f, T x) -> decltype(f(x)) {
return f(x);
}
のような機能を取ることができます
とsucc
にfoo
を適用し10の結果を得る:
foo(succ,9);
unctionsはsin
は、例えば、失敗し、動作しません:GCC(4.7)で
foo(std::sin,0.5);
を "テンプレートパラメータFを推定できなかった" と。
(sin<double>
を提供することがところでのみ複合型に関するものである。)はい、私はそれを右にまでストラクトことができます。少しと
template <typename T>
struct Sin {
T operator()(T x) { return std::sin(x); }
};
:
foo(Sin<double>(),0.5);
私の質問があり、代替がありますそのような新しい定義の必要性を避ける。 foo
のコールサイトでのみ使用できますか?関数ポインタに
'static_cast'は明らかに理想的ではありませんが、もう一つの選択肢です。 – ildjarn
「罪」とは何を意味しますか?それはうまくコンパイルします –
@VJovic:どういう意味ですか?コンパイルされません。あなたの削除された答えは、しかし、行います。どうしてか分かりません。 – user2023370