Cree un tipo de función std :: con argumentos limitados

Dado el tipo de función invocableC, Quiero obtener en tiempo de compilación unstd::function; el tipo de los cuales:

tiene el mismo tipo de función de retornoClos tipos de argumentos son los primerosN tipos de argumento de funciónC

Esto significa que, para un tipo dadovoid(int, char, double) y un hechoN, el tipo de la función es:

N = 1 => tipo de resultado:std::function<void(int)>N = 2 => tipo de resultado:std::function<void(int, char)>N = 3 => tipo de resultado:std::function<void(int, char, double)>N > 3 => error de tiempo de compilación

Ejemplo:

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...>());
};

Respuestas a la pregunta(4)

Su respuesta a la pregunta