Was Sie brauchen, ist ein alias template:
template <size_t S>
using my_array = std::array<double, S>;
Sie nicht direkt eine typedef
Vorlage machen können, finden Sie this post.
size_t
ist die Art des zweiten Vorlagenparameter std::array
nimmt, nicht int
.
Nun, da Sie über using
wissen, sollten Sie das verwenden. Es kann alles tun, was typedef
tut, plus dies. Auch lesen Sie es von links nach rechts mit einem schönen =
Zeichen als Trennzeichen, im Gegensatz zu typedef
, die Ihre Augen manchmal verletzen könnte.
Lassen Sie mich zwei weitere Beispiele für den Einsatz hinzu:
template <typename T>
using dozen = std::array<T, 12>;
Und wenn Sie einen Alias für std::array
, wie es ist, schaffen wollte, dann würden Sie seine Vorlage Unterschrift nachahmen müssen:
template <typename T, size_t S>
using my_array = std::array<T, S>;
- denn dies ist nicht erlaubt:
using my_array = std::array;
Ein 'std :: array' hat einen Dimensionsausdruck * constant *. Es kann keine Variable sein. Wenn Sie wollen, dass es eine Variable ist, wollen Sie 'std :: vector' oder vielleicht ein zukünftiges' std :: dynarray' (in einem zukünftigen Standard für C++) –