使用基于模板的长度在编译时初始化const数组

Ben*_*Uri 6 c++ templates template-meta-programming

可能重复:
在C++编译时以编程方式创建静态数组

是否可以在编译时初始化以下数组?

template<int n> void
foo()
{
    static int pairs[2*n]; // = {0,0, 1,1, ..., n-1,n-1}
    for (int i = 0; i < n; i++)
    {
         pairs[2*i] = pairs[2*i+1] = i;
    }

    do_something_with_pairs(pairs);
}
Run Code Online (Sandbox Code Playgroud)

(我在Xcode 4.5上使用Clang,所以C++ 11可以)

Che*_*Alf 0

据我所知,不可能扩展数组初始值设定项,并且这排除了基于递归模板的解决方案作为生成静态初始化数据的方法。

但是,您可以做一个简单的事情,即拥有一个包含您将使用的尽可能多的数据点的静态数组。这可以通过一个简单的脚本生成。或者例如通过 Boost 预处理器库。

然后你可以使用指向该数组的指针。