Custom Allocator fuer std::vector
-
Klaus82 schrieb:
Warum nimmst du dann nicht den seit C++11 etablierten Array?
ChefDerDeutschenBank schrieb:
Die Daten kommen aus einer Datei, und die groesse weiss ich wenn ich die Datei lese.
compile-time fstream 4tw!

-
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
constDefinition 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
constDefinition 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.