2011-12-16 19 views
24

Tengo el siguiente struct en mi código C++ (estoy usando Visual Studio 2010):¿Cómo inicializar una matriz de estructura en C++?

struct mydata 
{ 
    string scientist; 
    double value; 
}; 

Lo que me gustaría hacer es ser capaz de inicializar ellos de una manera rápida, similar a la inicialización del campo de C99 o inicialización de clase en C#, algo á la:

mydata data[] = { { scientist = "Archimedes", value = 2.12 }, 
        { scientist = "Vitruvius", value = 4.49 } } ; 

Si esto no es posible en C++ para una gran variedad de estructuras, puedo hacerlo de una matriz de objetos? En otras palabras, el tipo de datos subyacente para una matriz no es tan importante, es importante que tenga una matriz, no una lista, y que puedo escribir inicializadores de esta manera.

+1

No hay ninguna razón por la que no debería funcionar ... (por cierto, sería '.scientist = ...') ¿Lo has intentado? – fge

+0

¿por qué evitar el bucle? –

+0

@fge Sí, se llama inicialización agregada y se explica con más detalle en detalle [aquí] (http://en.cppreference.com/w/cpp/language/aggregate_initialization) – pfabri

Respuesta

46

La sintaxis en C++ es casi exactamente el mismo (acaba de salir de los parámetros con nombre):

mydata data[] = { { "Archimedes", 2.12 }, 
        { "Vitruvius", 4.49 } } ; 

En C++ 03 funciona siempre que el tipo de matriz es un aggregate. En C++ 11 esto funciona con cualquier objeto que tenga un constructor apropiado.

+1

. Pensé que la _inicialización uniforme_ generalmente se refería a la _list-initialization_ forma (es decir, sin el '=')? No pude encontrar una referencia para la inicialización uniforme en el estándar. –

+0

@CharlesBailey: Es muy posible que mi terminología sea incorrecta aquí; por lo tanto, eliminé esa parte. –

+0

@ BjörnPollex Creo que no sería malo volver a mencionarlo. – cjcurrie

Cuestiones relacionadas