C++:根据模板参数填充数组

phi*_*mue 12 c++ arrays templates fill

基本上,情况如下:

我有一个类模板(使用一个length类型的模板参数int),并想要引入一个静态数组.这个数组应长度的length和包含的元素1length.

代码如下所示:

template<int length>
class myClass{
    static int array[length];
};
Run Code Online (Sandbox Code Playgroud)

然后我想写一行用于初始化数组

// of course, the line below does not work as intended.
template<int length> int myClass<length>::array[length]={1,2, ..., length};
Run Code Online (Sandbox Code Playgroud)

(如何)可以实现这一目标?

Pet*_*der 5

你不能用C风格的数组做到这一点,因为它们没有值语义.

如果您使用类似的东西,std::tr1::array那么您可以通过初始化函数结果或使用生成这些值的迭代器轻松地执行您想要的操作.


adf*_*f88 2

使用“静态构造函数”习惯用法。

// 编辑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];
    }
}
Run Code Online (Sandbox Code Playgroud)