私は(ラムダ)関数を持っていて、可変引数パックとして渡された多くのファンクタが第3の関数に渡されました。署名は、与えられたgetters
の数などの引数としてできるだけ多くを持たなければならない変数テンプレート内のファンクタのパックからパラメータを持つ関数を呼び出す
template<typename F, typename... G>
ret_t call(F&& func, G&&... getters);
とF
のように見えます。
ここでは、という戻り値を持つ、ハードコーディングされた(constexpr)定数に対して呼び出されるfunc
を呼び出す必要があります。したがって、非定型コードは次のようになります
{
return func(getters_1(0), getters_2(0), getters_3(0) /* , ... */);
}
もちろん、私はテンプレートメタプログラミングを使用してプロセスを自動化したいと思います。
一時的な配列や中間のコンテナは使用しないでください。 (これはジェネリックを目的としたものではなく、getterの戻り値の型を知っています)最適化を可能にし、メモリを無駄にしないようにできるだけ直接関数に渡したい。
私はラムダのクロージャの多くのレベルでラップすることができた、それぞれ1つのパラメータをラップし、コンパイラから最高のことを願っていますが、とにかく私はそれを行うためのより明確な方法を求めています。
C++ 11、++ 14またはC++ 17のC? – max66
@ max66、私はg ++ 7.2を使っているので、C++ 17です。 – YiFei
@ YiFei定数は常に同じですか? – Rakete1111