die T[][][]
Syntax mehrdimensionales Array definieren ist einfach. Dies erzeugt jedoch einen unformatierten Array-Typ, der nicht in modernes C++ passt. Deshalb haben wir seit C++ 11 std::array
. Aber die Syntax zum Definieren eines mehrdimensionalen Arrays unter Verwendung von ist ziemlich unordentlich. Um zum Beispiel ein dreidimensionales int
Array zu definieren, müssten Sie std::array<std::array<std::array<int, 5>, 5>, 5>
schreiben. Die Syntax wird nicht skaliert. Ich frage nach einer Lösung für dieses Problem. Möglicherweise kann dieses Problem nicht mit dem vorhandenen Dienstprogramm von C++ behoben werden. In diesem Fall bin ich mit einem benutzerdefinierten Tool zufrieden, das entwickelt wurde, um die Syntax zu vereinfachen.Elegantly mehrdimensionales Array in modernen C++ definieren
ein solution mich gefunden:
template <typename T, std::size_t n, std::size_t... ns>
struct multi_array {
using type = std::array<typename multi_array<T, ns...>::type, n>;
};
template <typename T, std::size_t n>
struct multi_array<T, n> {
using type = std::array<T, n>;
};
template <typename T, std::size_t... ns>
using multi_array_t = typename multi_array<T, ns...>::type;
Sie fragen sich, ob die Umsetzung weiter vereinfacht werden kann.
[Boost.MultiArray] (http://www.boost.org/doc/libs/1_60_0/libs/multi_array/doc/user.html#sec_example) zur Rettung? –
@AngryLettuce Ich denke, das wäre für einfache Dinge wie diese etwas zu schwer. Ich möchte nicht einfach einen ganzen Boost reinziehen. – Lingxi
Sind 'typedef' ist nicht akzeptabel:' typedef std :: array>> Threed; '' .. Threed arr; arr [0] [0] [0] ... '? Dieses Beispiel müsste natürlich geändert werden, um verschiedene Typen zuzulassen, aber neugierig, ob das helfen könnte. –
txtechhelp