C++: Fill array according to template parameter C++: Fill array according to template parameter arrays arrays

C++: Fill array according to template parameter


You can't do that with C-style arrays because they don't have value semantics.

If you use something like std::tr1::array however then you could easily do what you want by initialising to a function result, or by using an iterator that generates those values.


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;};