C++ 在编译时使用基于模板的长度初始化常量数组

C++ 在编译时使用基于模板的长度初始化常量数组,c++,templates,template-meta-programming,C++,Templates,Template Meta Programming,可能重复: 是否可以在编译时初始化以下数组 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); } 模板无效 foo

可能重复:

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

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);
}
模板无效
foo()
{
静态整数对[2*n];//={0,0,1,1,…,n-1,n-1}
对于(int i=0;i

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

据我所知,不可能扩展数组初始值设定项,这排除了使用基于递归模板的解决方案来生成静态初始化数据的可能性

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


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

循环使用数组末尾以外的索引=>未定义的行为。抱歉,我现在已修复了该问题。我想知道有多少人将他们的工作放在一边,并努力解决此问题。这是一个很好的问题。但我放弃了。