#c #variadic-templates
#c #variadic-шаблоны
Вопрос:
Есть ли какой-нибудь элегантный способ выразить вызов функции в зависимости от некоторых n
, которые могут быть получены из аргументов шаблона
f(my_array[0], ... , my_array[n-1]);
внутри шаблона класса, который выглядит так?:
template <int... numbers>
class Abraham {
static constexpr std::size_t n = sizeof...(numbers);
some_type my_array[n];
void foo(){
//...
f(my_array[0], ... , my_array[n-1]); // This line is no valid C Code. How can one achieve this in an elegant way?
//...
}
}
Комментарии:
1. Для чего
numbers
используется, если вы используете только размер пакета параметров в этом примере?2. @parktomatomi Это просто сокращенная версия исходного кода, чтобы получить минимальный пример. (Числа будут использоваться независимо от массива)
Ответ №1:
Стандартная библиотека std::index_sequence
предназначена для такого рода вещей
template <size_t... Is>
void foo(std::index_sequence<Is...>) {
f(my_array[Is]...);
}
void foo() {
foo(std::make_index_sequence<n>{});
}
Демонстрация: https://godbolt.org/z/zhbGdb