Создайте тип std :: function с ограниченными аргументами
Учитывая тип вызываемой функцииC
Я хочу получить во время компиляцииstd::function
; тип которого:
C
типы аргументов являются первымиN
Тип аргумента функцииC
Это означает, что для данного типаvoid(int, char, double)
и данныйN
тип функции:
N = 1
=> тип результата:std::function<void(int)>
N = 2
=> тип результата:std::function<void(int, char)>
N = 3
=> тип результата:std::function<void(int, char, double)>
N > 3
=> Ошибка времени компиляцииПример:
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...>());
};