Crie um tipo de função std :: com argumentos limitados

Dado o tipo de uma função que pode ser chamadaC, Quero chegar em tempo de compilação astd::function; cujo tipo:

tem o mesmo tipo de retorno de funçãoCos tipos de argumento são os primeirosN tipos de argumento de funçãoC

Isso significa que, para um determinado tipovoid(int, char, double) e um dadoN, o tipo da função é:

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 => erro de tempo de compilação

Exemplo:

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

questionAnswers(4)

yourAnswerToTheQuestion