J'ai une classe de liste dans laquelle la variable de taille est un membre const
. Ceci est utile pour moi car il impose l'exigence que la taille de la liste peut varier d'une exécution à l'autre, mais ne peut pas varier au cours d'une exécution individuelle.Construire std :: array en remplissant un élément
Je voudrais créer une collection de ces listes. Le nombre de listes dans la collection est une variable de modèle, donc je voudrais utiliser un std::array
... ie, je voudrais un tableau de listes, où la taille de la matrice est un paramètre de modèle et la taille de chaque la liste est une const
spécifiée à la construction
Malheureusement:
- La liste taille const n'a pas de constructeur par défaut (sa taille doit être spécifiée!), donc je dois fournir un argument de constructeur à chaque élément de la liste. Je ne peux pas créer le tableau, puis définissez les éléments
- Parce que ma taille de la liste est une variable de modèle, je ne peux pas utiliser une liste standard initialiseur - les éléments de nombre requis varie
Je reconnais qu'il y des alternatives:
- je pouvais utiliser un
std::vector
et justepush_back
les éléments un par un jusqu'à ce que la taille du vecteur est égal à mon paramètre de modèle, mais cela semble inélégante, car il ne serait pas respecter naturellement la condition que la La taille du vecteur résultant ne doit pas être modifiée une fois qu'il est entièrement rempli. - Je pourrais inverser l'ordre d'index, et avoir une liste const-size de
std::arrays
. Cela ne correspond pas bien avec le reste de mon code, cependant; Je voudrais pouvoir passer une liste individuelle const-size du tableau au code client - Je pourrais créer un constructeur par défaut pour la classe de liste const size, créer le tableau, puis utiliser le placement new pour remplacer les éléments du tableau un par un. Cela semble que cela pourrait avoir des effets secondaires néfastes (qu'est-ce que le constructeur par défaut de la liste de const taille faire? Et s'il est appelé par hasard ailleurs? Qu'est-ce qui se passe quand mon successeur n'a aucune idée de ce que je l'ai fait?)
Étant donné qu'aucun d'entre eux sont tout à fait idéal, je pense que ce serait génial s'il y avait un constructeur de tableau (ou la fonction d'aide) qui prendrait, comme arguments:
- le nombre d'éléments dans le tableau de T
- Un seul objet T
... et renvoie un std::array<T>
où chaque T
a été copié à partir de l'argument 2.
Une telle chose existe-t-elle?
"La taille de chaque liste est un const spécifié lors de la construction" - J'espère sincèrement que vous voulez dire aussi à * compile-time *, n'est-ce pas? Sinon, vous pouvez jeter l'idée d'utiliser 'std :: array' dès le début. –
WhozCraig
La taille des listes n'est pas une constante de temps de compilation. – user1476176