2012-11-29 81 views
6

可能重複:
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所以C++ 11 OK)

+0

循環使用超出數組末尾的索引=> **未定義的行爲**。 –

+0

對不起,我現在修復了。 –

+2

我想知道有多少人把他們的工作放在一邊,並努力解決這個問題。這個問題問得好。但我放棄了。 – 2012-11-29 11:50:11

回答

0

據我知道這是不可能的延長數組初始化,並且排除了基於遞歸模板解決方案作爲生成靜態初始化數據的手段。

但是,你可以做一個簡單的事情,即擁有一個靜態數組,並且使用的數據點數儘可能多。這可以通過一個簡單的腳本生成。或者例如通過Boost預處理器庫。

然後你可以使用指向該數組的指針。