Seite 1 von 1

[C++11] Syntax für Uniform Initialisation

Verfasst: 21.03.2014, 15:28
von Schrompf
Moin,

kurze Frage: ich würde gern ein Rudel float[4] in ein std::array packen. Leider schimpft VS2013 über meinen Initialisierungssyntax. Hat der Compiler Recht oder hab ich Recht?

Ich so:

Code: Alles auswählen

static const std::array<float[4], 9> GrafikTeile = 
  {
    { 0, 0, 544, 353 },
    { 63, 237, 116, 92 },
    { 85, 157, 119, 113 },
    { 110, 103, 99, 88 },
    { 191, 109, 105, 78 },
    { 82, 41, 122, 97 },
    { 186, 52, 125, 66 },
    { 290, 59, 130, 115 },
    { 372, 58, 109, 88 }
  };
und darauf der Compiler so:

Code: Alles auswählen

1>c:\projekte\splatter\source\spiel\sammelobjektanzeige.cpp(25): error C2078: Zu viele Initialisierungen
Sollte nur ein schnelles MerkDirMalDieseZahlen werden, aber ich kriege das dem Compiler nicht vermittelt. Stimmt das so?

Danke!

Re: [C++11] Syntax für Uniform Initialisation

Verfasst: 21.03.2014, 18:56
von mnemonix

Code: Alles auswählen

const std::array<float [4], 9> GrafikTeile =
{
    // float (std::array<float [4], 9>::elems[9]) [4]
    {
        {0, 0, 544, 353 },
        {63, 237, 116, 92 },
        {85, 157, 119, 113 },
        {110, 103, 99, 88 },
        {191, 109, 105, 78 },
        {82, 41, 122, 97 },
        {186, 52, 125, 66 },
        {290, 59, 130, 115 },
        {372, 58, 109, 88}
    }
};
So sollte es funktionieren, da du ja eigentlich einen simplen POD mit nur einem Member (float (std::array<float [4], 9>::elems[9]) [4]) initialisieren willst. std::array hat keinen speziellen Konstruktor.

Re: [C++11] Syntax für Uniform Initialisation

Verfasst: 21.03.2014, 19:11
von Schrompf
Zwei std::array ineinandergeschachtelt. Gute Idee, danke!

Re: [C++11] Syntax für Uniform Initialisation

Verfasst: 21.03.2014, 19:17
von mnemonix
Uuups, sorry. Das war ein Versuch/Kopie aus meinem VS2013, habe es wieder deinem Beispiel nach umgeändert. Aber std::array<std::array<float, 4>, 9> ist äquivalent dazu.

EDIT: Alternativ kannst du auch alle inneren geschweiften Klammern entfernen. Finde ich aber persönlich nicht so schön.