Custom Allocator fuer std::vector



  • Desdemona schrieb:

    compile-time fstream 4tw! 😃

    Und auf Deutsch? 😕

    Gruß,
    -- Klaus.



  • Klaus82 schrieb:

    Warum nimmst du dann nicht den seit C++11 etablierten Array?

    Das gibts schon seit TR1.



  • Klaus82 schrieb:

    Und auf Deutsch? 😕

    std::array hat eine Größe, die zur Compilezeit feststehen muss. Die Größe wird aber erst zur Laufzeit aus der Datei gelesen. Daher kann std::array nicht verwendet werden.



  • knivil schrieb:

    Klaus82 schrieb:

    Warum nimmst du dann nicht den seit C++11 etablierten Array?

    Das gibts schon seit TR1.

    Jo,
    aber jetzt lässt es sich einfach so verwenden, ohne ein zusätzliches Fass aufzumachen. 🙂

    nwp3 schrieb:

    std::array hat eine Größe, die zur Compilezeit feststehen muss. Die Größe wird aber erst zur Laufzeit aus der Datei gelesen. Daher kann std::array nicht verwendet werden.

    Also folgendes funktioniert bei mir, geht also auch zur Laufzeit.

    #include <array>
    #include <iostream>
    
    int main()
    {
    	// das Einlesen der Datei sagt, dass 10 Elemente benötigt werden
    	unsigned int const n = 10;
    
    	std::array<double,n> arr;
    
    	arr[0] = 1.5;
    
    	std::cout << arr[0] << std::endl;
    
    	return 0;
    }
    

    Gruß,
    -- Klaus.



  • Dann lass mal das const beim n weg.



  • manni66 schrieb:

    Dann lass mal das const beim n weg.

    Ja schon klar, dann funktioniert es nicht. 🙄

    Aber nachdem ich eben schreiben kann

    int const n = funktionDieMirDieNoetigeZahlAnElementenAusDateiLiefert();
    

    ist doch alles in Butter - zur Laufzeit.

    Gruß,
    -- Klaus.



  • Klaus82 schrieb:

    ist doch alles in Butter - zur Laufzeit.

    Ja, zur Laufzeit.
    Templateparameter sind aber Teil des Typen und Typen werden zur COMPILE-Zeit bestimmt. Da kannst du keine Laufzeitvariable hin tun.



  • Klaus82 schrieb:

    manni66 schrieb:

    Dann lass mal das const beim n weg.

    Ja schon klar, dann funktioniert es nicht. 🙄

    Aber nachdem ich eben schreiben kann

    int const n = funktionDieMirDieNoetigeZahlAnElementenAusDateiLiefert();
    

    ist doch alles in Butter - zur Laufzeit.

    Gruß,
    -- Klaus.

    Da ist beim Array nichts in Butter... Laufzeitkonstant reicht bei Templates nicht.



  • Nathan schrieb:

    Klaus82 schrieb:

    ist doch alles in Butter - zur Laufzeit.

    Ja, zur Laufzeit.
    Templateparameter sind aber Teil des Typen und Typen werden zur COMPILE-Zeit bestimmt. Da kannst du keine Laufzeitvariable hin tun.

    Also ist diese const Definition ein workaround?

    Gruß,
    -- Klaus.



  • Klaus82 schrieb:

    Nathan schrieb:

    Klaus82 schrieb:

    ist doch alles in Butter - zur Laufzeit.

    Ja, zur Laufzeit.
    Templateparameter sind aber Teil des Typen und Typen werden zur COMPILE-Zeit bestimmt. Da kannst du keine Laufzeitvariable hin tun.

    Also ist diese const Definition ein workaround?

    Gruß,
    -- Klaus.

    Wenn du folgendes hast:

    const int i = 5;
    

    Ist der Compiler in der Lage i hardzucoden, überall dort wo i steht, steht dann im Programmcode quasi 5. Deshalb kannst du das auch als Templateparameter nutzen.
    Ersetzt du das aber durch bspw:

    const int i = foo();
    

    Kann diese Optimierung nicht stattfinden. Es gibt dann lediglich einen Fehler, wenn du versuchst i zu ändern. Dann kannst du das nicht mehr als Templateparameter verwenden, obowhl du kaum was geändert hast.
    Aus diesem Grund gibt es seit C++11 constexpr, dann gibt es einen Fehler, wenn du das versuchst zu machen.


Anmelden zum Antworten