Как на этапе компиляции сгенерировать последовательные числа, т.е `0,1,2...` чтобы потом их поместить в шаблон
Как на этапе компиляции сгенерировать последовательные числа, т.е 0,1,2... в данном примере
template<typename T, int size, int random>
auto statik()
{
static T t[size];
return t;
}
int main()
{
for (int i = 0; i < 10; ++i)
{
cin >> statik<int, 10, /*каждий раз генерируеться новое число*/>()[i];
}
}
Ответы (1 шт):
Автор решения: AR Hovsepyan
→ Ссылка
Разве что ради спортивного интереса:
template<size_t n>
struct Elem{
enum { res = 1 + Elem<n - 1>::res };
};
template<>
struct Elem<0> {
enum { res = 0 };
};
template <size_t n, size_t...args>
struct A {
static constexpr auto& array =
A<n - 1, Elem<n>::res, args...>::array;
};
template <size_t...args>
struct A<0, args...> {
static constexpr int array[] = { 0, args... };
};
template <size_t n>
static constexpr auto& Array = A<n>::array;
//пример использования
int main()
{
constexpr unsigned N = 8;
for (unsigned n : Array<N>)
cout << n << ' ';
//0 1 2 3 4 5 6 7 8
}
Вполне можно значение первого члена передать тоже в шаблон и создать диапазон начиная от любого числа