#include <utility>
template<std::size_t Value, std::size_t Count, typename T = std::index_sequence<>>
struct index_sequence_of_same_value;
template<std::size_t Value, std::size_t Count, std::size_t... Rest>
struct index_sequence_of_same_value<Value, Count, std::index_sequence<Rest...>>
{
using type = typename index_sequence_of_same_value<Value, Count - 1, std::index_sequence<Value, Rest...>>::type;
};
template<std::size_t Value, std::size_t... Rest>
struct index_sequence_of_same_value<Value, 0, std::index_sequence<Rest...>>
{
using type = std::index_sequence<Rest...>;
};
template<std::size_t Value, std::size_t Count, typename T = std::index_sequence<>>
using make_index_sequence_of_same_value= typename index_sequence_of_same_value<Value, Count, T>::type;
int main()
{
make_index_sequence_of_same_value<4, 6> t; // std::integer_sequence<std::size_t, 4, 4, 4, 4, 4, 4>
}
Это кажется простым при использовании рекурсивного создания шаблона. Но эта реализация очень медленная и также ограничивающая, поскольку она должна рекурсивно создавать экземпляры шаблонов для каждого элемента.
Есть ли другой способ сделать что-то подобное без создания экземпляров шаблонов для числа элементов?