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

Initialize a const array in compile time with a template-based length

本文关键字:初始化 const 数组 于模板 编译      更新时间:2023-10-16

可能的重复项:
在编译时以编程方式创建静态数组 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);
}

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

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

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

然后,您只需使用指向该数组的指针即可。