Как получить доступ к n-му значению последовательности integer_sequence?
Я хотел бы знать, как получить доступ к n-му значению std::integer_sequence
, Например, учитывая тип
using foo = std::integer_sequence<int, 3, 1, 4>;
Я хотел бы иметь что-то вроде
auto i = get<foo, 2>(); // i = 4
Есть ли что-то в стандартной библиотеке, чтобы сделать это? Если нет, нужно ли прибегать к итеративному решению, если я хочу, чтобы это работало в C++14 (не в C++17)?
1 ответ
Решение
Насколько мне известно, такого встроенного метода не существует, но вы можете реализовать его в несколько аккуратных строк без каких-либо итераций:
template<class T, T... Ints>
constexpr T get(std::integer_sequence<T, Ints...>, std::size_t i) {
constexpr T arr[] = {Ints...};
return arr[i];
}
Посмотрите, как это работает здесь: https://godbolt.org/z/yAfMeg
Аргументы могут быть подняты в параметры шаблона (чтобы соответствовать вашему примеру) с немного большим количеством кода.