Sto cercando di capire lo boost array. Il code può essere letto facilmente dal sito dell'autore.Come dovrei inizializzare un boost :: array?
Nella motivazione del progetto, l'autore (Nicolai M. Josuttis) ha affermato che sono possibili i seguenti due tipi di inizializzazione.
boost::array<int,4> a = { { 1, 2, 3 } }; // Line 1
boost::array<int,4> a = { 1, 2, 3 }; // Line 2
Nel mio esperimento con g ++ (versione 4.1.2) Linea 1 funziona, ma la linea 2 non è. (linea 2 si ottiene il seguente:
warning: missing braces around initializer for 'int [4]'
warning: missing initializer for member 'boost::array<int, 4ul>::elems'
)
Tuttavia, la mia domanda principale è, come Linea 1 sta lavorando? Ho cercato di scrivere una classe simile a array.hpp e utilizzare un'istruzione come linea 1, ma che non ha funzionato :-(. L'errore è
typedef array< unsigned int, 10 > MyArray;
MyArray b = { { 1, 2, 3 } }; // Line 74
array_test.cpp:74: error: in C++98 'b' must be initialized by constructor, not by '{...}'
array_test.cpp:74: error: no matching function for call to 'array<unsigned int, 10u>::array(<brace-enclosed initializer list>)'
array.h:16: note: candidates are: array<unsigned int, 10u>::array()
array.h:16: note: array<unsigned int, 10u>::array(const array<unsigned int, 10u>&)
qualcuno può spiegare? C'è qualche cosa specifica spinta accadendo in linea 1 che ho bisogno di essere a conoscenza?
Come Potatoswatter menziona questo funziona solo per POD tipi. Tuttavia, probabilmente vale la pena notare che la prossima specifica C++ 0x fornisce modi per supportare gli elenchi di inizializzazione con tipi non pod. –
probabilmente hai campi costruttore o privato nella tua classe – Anycorn
+ 1 @aaa: Grazie mille. Sì, il mio array (i dati) era privato nella mia classe. – Arun