【问题标题】:Initialize a const array in compile time with a template-based length [duplicate]在编译时使用基于模板的长度初始化 const 数组
【发布时间】:2012-11-17 11:25:41
【问题描述】:

可能重复:
Programmatically create static arrays at compile time in 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 可以)

【问题讨论】:

  • 循环使用超出数组末尾的索引 => 未定义行为
  • 抱歉,我现在修好了。
  • 我想知道有多少人把他们的工作放在一边,努力解决这个问题。这个问题问得好。但我要放弃了。

标签: c++ templates template-meta-programming


【解决方案1】:

据我所知,扩展数组初始化器是不可能的,这就排除了将基于递归模板的解决方案作为生成静态初始化数据的手段。

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

那么你可以只使用指向该数组的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2021-11-13
    相关资源
    最近更新 更多