tr1::array als funktionsargument
-
So zum Beispiel: http://ideone.com/XHk75
-
314159265358979 schrieb:
So zum Beispiel: http://ideone.com/XHk75
Das sieht gut aus, aber würde es aber auch damit funktionieren?
array<array<3>,GetCount()> vec; ... // Befüllen ... a(vec);Wahrscheinlich nicht weil n ja während der Laufzeit vorgegeben wird während das Template zur Kompilierzeit für einen bestimmten Typ generiert wird oder sehe ich das falsch?
Wahscheinlich muss ich doch noch zum vector greifen.
-
Das erzeugt einen enormen Code Bloat für eine Sache, die man mit weniger Code und ohne Code Bloat wesentlich eleganter mit einem std::vector lösen kann.
-
Was hast du eigentlich gegen std::vector?
-
Ich finde, wenn ein vector nicht unbedingt gebraucht wird, dann soll er doch ein std::array nutzen.
@GastProgrammierer: Richtig, templates sind Compiletime-Konstrukte, das wird so nicht funktionieren.
-
fghfgh schrieb:
Was hast du eigentlich gegen std::vector?
Es fühlt sich für mich falsch an ein dynamisch wachsendes array (vector) für Aufgaben zu nehmen dort wo man die Größe "eigentlich" kennt.
Da jedoch schon mehrere sich zum vector geäußert haben scheint es die übliche Vorgehensweise zu sein.
-
Ich verwende array immer, wo es geht, weil ich hier keine dynamische Allokation brauche, was einen Geschwindigkeitsvorteil bringt. Wenn du also nichts dynamisches brauchst, dann kannst du ruhig das array nehmen.
-
Man sollte sich nicht von seinem Gefühlen leiten lassen. Wir sind hier nicht bei Star Wars!

Im ernst, ein Vector ist kein lebender Organismus. Er wächst tatsächlich nur dann wenn er es muß. Trau dich!

-
GastProgrammierer schrieb:
Wahrscheinlich nicht weil n ja während der Laufzeit vorgegeben wird während das Template zur Kompilierzeit für einen bestimmten Typ generiert wird oder sehe ich das falsch?
Genau, C-Arrays und
std::tr1::arrayerfordern für ihre Grösse konstante Ausdrücke, die bereits zur Kompilierzeit feststehen. Nimm alsostd::vector.Oder wenn du Boost hast und mehrdimensionale Arrays brauchst, kannst du auch
boost::multi_arrayanschauen.
-
Nexus schrieb:
Oder wenn du Boost hast und mehrdimensionale Arrays brauchst, kannst du auch
boost::multi_arrayanschauen.Boost ist ein gutes Stichwort. Es ist alles schön mit Boost multi_array implementiert. Mein Arbeitgeber besteht jedoch darauf, dass die Implementierung Boostfrei bleibt und da er bezahlt darf er den Takt vorgeben.