Definire la matrice multidimensionale utilizzando la sintassi T[][][]
è semplice. Tuttavia, questo crea un tipo di matrice raw che non si adatta bene al C++ moderno. Ecco perché abbiamo std::array
dal C++ 11. Ma la sintassi per definire un array multidimensionale usando std::array
è piuttosto caotica. Ad esempio, per definire un array tridimensionale int
, è necessario scrivere std::array<std::array<std::array<int, 5>, 5>, 5>
. La sintassi non scala affatto. Sto chiedendo una soluzione per questo problema. Forse, questo problema non può essere risolto utilizzando l'utilità esistente fornita da C++. In tal caso, sono soddisfatto di uno strumento personalizzato sviluppato per semplificare la sintassi.Definisci elegante array multidimensionale in C++ moderno
Trovato un solution me stesso:
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;
chiedendosi se l'attuazione può essere ulteriormente semplificato.
[Boost.MultiArray] (http://www.boost.org/doc/libs/1_60_0/libs/multi_array/doc/user.html#sec_example) in soccorso? –
@ AngryLettuce Penso che sarebbe un po 'troppo pesante per questioni semplici come questa. Non voglio dare un intero impulso solo per questo. – Lingxi
'typedef' non è accettabile:' typedef std :: array>> threeD; '..' threeD arr; arr [0] [0] [0] ... '? Questo esempio dovrebbe essere modificato per consentire diversi tipi, ovviamente, ma curioso se ciò potrebbe aiutare? –
txtechhelp