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:
C
os 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çãoExemplo:
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...>());
};