Estoy tratando de entender el boost array. El code se puede leer fácilmente desde el sitio del autor.¿Cómo debo inicializar un boost :: array?
En la lógica de diseño, el autor (Nicolai M. Josuttis) mencionó que los siguientes dos tipos de inicialización son posibles.
boost::array<int,4> a = { { 1, 2, 3 } }; // Line 1
boost::array<int,4> a = { 1, 2, 3 }; // Line 2
En mi experimento con g ++ (versión 4.1.2) La línea 1 está funcionando pero la línea 2 no lo está. (Línea 2 se obtiene la siguiente:
warning: missing braces around initializer for 'int [4]'
warning: missing initializer for member 'boost::array<int, 4ul>::elems'
)
Sin embargo, mi principal pregunta es, ¿cómo Línea 1 está funcionando? Traté de escribir una clase similar a array.hpp y utilizar declaración como Línea 1, pero que no funcionó :-(. El error es
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>&)
Puede alguien explicar? ¿Hay alguna cosa específica impulso sucede en Línea 1 que necesito ser consciente de?
Como Potatoswatter menciona esto sólo funciona para POD tipos. Sin embargo, es probable que valga la pena señalar que la próxima especificación de C++ 0x proporciona formas de soporte para listas de inicializadores con tipos que no son de pod. –
es probable que tenga un constructor o campos privados en su clase – Anycorn
+ 1 @aaa: Muchas gracias. Sí, mi matriz (los datos) era privada en mi clase. – Arun