class array global definieren
-
sternbein schrieb:
@Sone: Warum ist das proxy-Objekt privat?
Mir ist klar, dass man auch so auf den Typ zugreifen kann. Einfach so, nehme ich an.
-
out schrieb:
SeppJ schrieb:
typedef std::array<23, std::array<79, bool>> map;:p Andersum. Erst Typ, dann Size.
Ach, ich kann das nie auswendig behalten. Statisch dimensionierte Arrays benutze ich ehrlich gesagt nur sehr selten

-
SeppJ schrieb:
out schrieb:
SeppJ schrieb:
typedef std::array<23, std::array<79, bool>> map;:p Andersum. Erst Typ, dann Size.
Ach, ich kann das nie auswendig behalten. Statisch dimensionierte Arrays benutze ich ehrlich gesagt nur sehr selten

Ich finds logisch. Man fragt doch immer zuerst nach dem was, und dann nach demwie(viele).
-
Ich habe es vorher auch verwechselt, aber man muss sich vorstellen, dass es einfach wie bei der Deklaration eines echten Arrays aussieht: Erst die Typangabe, dann die Bounds.
-
Ja, die Analogie ist mir schon klar :p . Ich find's andersrum aber übersichtlicher, denn oft verschachtelt man die Arrays:
array<superlange typangabe<mit vielen<verschachtelten>, templates>, wie viele>Da muss man beim Lesen viel hin und her springen, ebenso beim Schreiben. Andersrum hingegen hat man all die schnell erfassbaren Informationen auf einen Blick, danach kann man sich die dicke Typangabe ansehen. Daher mache ich es intuitiv oft falsch herum. Aber die Reihenfolge, wie sie ist, ist in der Sprache schon so tief verwurzelt, es wäre inkonsistent das in diesem Fall anders zu machen.
-
Man kann die Umwandlung auch dem Compiler überlassen
#include <array> #include <cstddef> template <typename T> struct identity { using type = T; }; template <typename T> using eval = typename T::type; template <typename T> struct make_std_array : identity<T> {}; template <typename T, std::size_t N> struct make_std_array<T[N]> : identity<std::array<eval<make_std_array<T>>,N>> {}; template <typename T> using std_array = eval<make_std_array<T>>; #include <type_traits> static_assert( std::is_same<std_array<int[3][4]>, std::array<std::array<int, 4>, 3>>::value, "" );
-
Nun ja, das ist ja auch nicht schwer. Ein Multidimensionales Array ist ein Array von Arrays. Und leider gibt es keine Array-Bounds als pack-expansion pattern...
Aber camper hat immer die besten Ideen. Das ist nicht fair!
