Как получить доступ к 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

Аргументы могут быть подняты в параметры шаблона (чтобы соответствовать вашему примеру) с немного большим количеством кода.

Другие вопросы по тегам