Erstelle einen std :: -Funktionstyp mit eingeschränkten Argumenten

Gegeben den Typ einer aufrufbaren FunktionC, Ich möchte zur Kompilierzeit ein @ bekommstd::function; deren Art:

hat den gleichen Rückgabetyp der FunktionCdie Argumenttypen sind die erstenN Argument FunktionsartenC

Dies bedeutet, dass für einen bestimmten Typvoid(int, char, double) und ein gegebenesN, die Art der Funktion ist:

N = 1 => Ergebnistyp:std::function<void(int)>N = 2 => Ergebnistyp:std::function<void(int, char)>N = 3 => Ergebnistyp:std::function<void(int, char, double)>N > 3 => Kompilierzeitfehler

Beispiel

template<std::size_t N, typename R, typename... A>
constexpr auto get() {
    return /*(magically somehow)*/ std::function<R(FirstNFromA...)>
}

template<std::size_t N, typename R, typename... A>
struct S {
    using func = decltype(get<N, R, A...>());
};

Antworten auf die Frage(8)

Ihre Antwort auf die Frage