Quello che vi serve è un alias template:
template <size_t S>
using my_array = std::array<double, S>;
Non è possibile effettuare direttamente un modello typedef
, vedere this post.
size_t
è il tipo del secondo parametro modello std::array
prende, non int
.
Ora che sai di using
, si dovrebbe essere utilizzando tale. Può fare tutto ciò che fa typedef
, oltre a questo. Inoltre, lo leggi da sinistra a destra con un bel segno =
come delimitatore, al contrario di typedef
, che a volte può far male ai tuoi occhi.
Permettetemi di aggiungere altri due esempi di utilizzo:
template <typename T>
using dozen = std::array<T, 12>;
E se si voleva creare un alias per std::array
, così com'è, avresti bisogno di imitare la sua firma modello:
template <typename T, size_t S>
using my_array = std::array<T, S>;
- perché questo non è consentito:
using my_array = std::array;
Un 'std :: array' ha un'espressione di * costante * dimensione. Non può essere una variabile. Se vuoi che sia una variabile, vuoi 'std :: vector' o forse qualche futuro' std :: dynarray' (in qualche futuro standard per C++) –