2012-11-29 10 views
6

Powiel możliwe:
Programmatically create static arrays at compile time in C++Inicjalizacja const tablicę w czasie kompilacji o długości opartym na szablonie

to możliwe, aby zainicjować następującą tablicę w czasie kompilacji?

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); 
} 

(używam brzękiem na Xcode 4.5 więc C++ 11 jest OK)

+0

pętla używa indeksów poza końcem tablicy => ** Niezdefiniowane zachowanie **. –

+0

Przepraszam, naprawiłem to teraz. –

+2

Zastanawiam się, ilu ludzi odłożyło swoją pracę na bok i próbuje ciężko rozwiązać ten problem. To jest bardzo dobre pytanie. Ale poddaję się. –

Odpowiedz

0

O ile wiem, to nie jest możliwe, aby przedłużyć inicjator tablicy, a wyklucza rekurencyjną szablon w oparciu rozwiązanie jako środek do generowania statycznych danych inicjalizacyjnych.

Można jednak zrobić prostą rzecz ze statyczną tablicą z wieloma punktami danych, jakich kiedykolwiek użyjesz. Można to wygenerować za pomocą prostego skryptu. Lub np. przez bibliotekę preprocesorów Boost.

Następnie wystarczy użyć wskaźnika do tej tablicy.

Powiązane problemy