C++: Fill array according to template parameter
Use "static constructor" idiom.
// EDIT 2
#include <iostream>template<int length>class myClass {public: typedef int ArrayType[length]; static struct StaticData { ArrayType array; StaticData() { for (int i = 0; i < length; i++) array[i] = i; } } static_data; static ArrayType &array;};template<int length>typename myClass<length>::StaticData myClass<length>::static_data;template<int length>typename myClass<length>::ArrayType &myClass<length>::array = myClass<length>::static_data.array;int main(int argc, char** argv) { const int LEN = 5; for (int i = 0; i < LEN; i++) { std::cout << myClass<LEN>::array[i]; }}
You can write a wrapper class, but I'm sure there are cleaner solutions:
template <size_t length>class array_init_1_to_n{ int array[length];public: array_init_1_to_n() { for (int i = 0; i < length; ++i) { array[i] = i + 1; } } operator int*() { return array; } operator const int*() const { return array; }};template<size_t length>class myClass{ static array_init_1_to_n<length> array;};