2012-11-29 18 views
6

Eventuali duplicati:
Programmatically create static arrays at compile time in C++inizializzare una matrice const in fase di compilazione con una lunghezza basata su modelli

E 'possibile inizializzare la seguente matrice in fase di compilazione?

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

(io uso Clang su Xcode 4.5 in modo da C++ 11 è OK)

+0

il ciclo utilizza gli indici oltre la fine dell'array => ** Comportamento non definito **. –

+0

Scusa, l'ho risolto ora. –

+2

Mi chiedo quante persone hanno messo da parte il loro lavoro e hanno cercato di risolvere il problema. Questa è un'ottima domanda. Ma mi sto arrendendo. –

risposta

0

Per quanto ne so che non è possibile estendere un inizializzatore array, e che esclude un modello ricorsivo basato soluzione come mezzo per generare dati di inizializzazione statici.

Tuttavia, è possibile eseguire la semplice operazione di disporre di un array statico con tutti i punti dati che verranno utilizzati. Questo può essere generato da un semplice script. O ad es. dalla libreria del preprocessore Boost.

Quindi è possibile utilizzare solo un puntatore a tale matrice.

Problemi correlati