Проблема
Учитывая любую функцию (или вызываемый) типа
Function
, как я могу получить все ее типы аргументов как тип кортежа?
Например, мне нужен трейт function_traits<Function>::arguments
, где:
int f();
typename function_traits<decltype(f)>::arguments // => gives me std::tuple<>
void g(int);
typename function_traits<decltype(g)>::arguments // => gives me std::tuple<int>
void h(int, int);
typename function_traits<decltype(h)>::arguments // => gives me std::tuple<int, int>
Моя мысль
Первый
Мне нужно получить размер аргументов, к счастью, boost уже реализовал function_traits<F>::arity
затем
Создайте std::integer_sequence
из 1 для artify, сопоставьте его с типом аргументов, но здесь возникает проблема, чтобы сопоставить integer_sequence
, мне нужно что-то вроде этого:
function_traits<F>::arg_type<N> // -> N-th arg_type
но boost обеспечивает только это:
function_traits<F>::argN_type
Вопрос
Как я могу реализовать function_traits<F>::arg_type<N>
? Я могу использовать стандарт С++ до С++ 17