Я хотел бы знать, как получить доступ к n-му значению std::integer_sequence. Например, учитывая тип
using foo = std::integer_sequence<int, 3, 1, 4>;
Я бы хотел что-то вроде
auto i = get<foo, 2>(); // i = 4
Есть ли что-нибудь в стандартной библиотеке для этого? Если нет, нужно ли мне прибегать к итеративному решению, если я хочу, чтобы это работало в C++ 14 (не C++ 17)?





Насколько мне известно, такого встроенного метода нет, но вы можете реализовать его самостоятельно в несколько аккуратных строк без каких-либо итераций:
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
Аргументы можно поднять в параметры шаблона (в соответствии с вашим примером) с помощью немного большего количества кода.
Разве constexpr T arr[] = {Ints...}; не является функцией C++ 17?
@ user209974 нет. Сам по себе это просто C++ 11. Но поскольку функция не является одним оператором return, для нее требовался C++ 14. По предоставленной ссылке вы можете видеть, что все основные компиляторы прекрасно принимают его в режиме C++ 14.
@ user209974 не забудьте принять ответы на свои вопросы (я вижу, у вас много вопросов, на которые нет принятых ответов).
На самом деле это невозможно. Какую исходную проблему вы хотите решить с помощью этой целочисленной последовательности? Зачем вам это нужно? Зачем нужно извлекать из него произвольный «элемент»?