tr1::array Frage



  • Hallo,

    ich habe eine map:
    map<string, array<float, 2> myMap;
    und will da jetzt einen Wert einfügen. Ich mache das so:

    Vector2 v = ...
    array<float, 2> data = {v.x, v.y}; // Kann ich hier Variablen benutzen?
    myMap["foo"] = data;
    

    Ist das so richtig?

    myMap["foo"] = {v.x, v.y};
    

    Wieso geht das hier nicht?


  • Mod

    Frage 1: Ja, das kann man so machen (warum probierst du es nicht einfach aus?). Der Compiler wird sich eventuell beschweren, dass er lieber array<float, 2> data = {{v.x, v.y}}; hätte, aber wenn ich die Anforderungen an tr1::array richtig im Kopf habe, sollte garantiert sein, dass das auch so in Ordnung ist.

    Frage 2: Das {...} ist eine besondere Schreibweise um komplexe Datentypen bei ihrer Erstellung gleich zu initialisieren. Das ist keine andere Schreibweise für ein Array und es kann auch nur zur Initialisierung benutzt werden, nicht um es einem schon fertigem Objekt zuzuweisen. Ich fürchte das was du da machen willst geht (ohne Benutzung von C++11-Mitteln) nur durch elementweise Zuweisung oder über ein temporäres Zwischenarray.



  • GCC 4.6 schluckt auch solche initialisierungen (weiß allerdings nicht genau, ob das schon C++11 ist):

    myMap["foo"] = std::array<float, 2>({{v.x, v.y}});
    

Log in to reply