vecteur stl et c++: comment .redimensionner sans un constructeur par défaut?
Comment puis-je dire de la STL, en particulier pour la méthode resize()
vecteur, pour initialiser des objets avec un constructeur autre que par défaut, et avec quels paramètres?
Par exemple:
class something {
int a;
something (int value);
}
std::vector<something> many_things;
many_things.resize (20);
Plus généralement, comment puis-je la force de la STL à utiliser mon constructeur quand il en a besoin pour créer des objets, et de passer des paramètres à ce constructeur?
Dans mon cas, l'ajout d'un constructeur par défaut n'est pas une option, et je préfère ne pas utiliser un tableau de pointeurs pour résoudre le problème.
Vous devez vous connecter pour publier un commentaire.
Utiliser le 2-l'argument de surcharge:
many_things.resize(20, something(5));
Je pense à une solution, mais iwarn vous, c'est plutôt laid. Je ne sais pas pourquoi vous ne voulez pas ajouter un constructeur par défaut, mais si vous souhaitez empêcher les utilisateurs de la classe à créer unintialized cas, vous pouvez simplement faire le constructeur par défaut privé et déclarez la bonne classe vector un ami :
C'est moche pour plusieurs raisons, principalement parce qu'il ne fonctionne que pour un seul type de conteneur. Il n'y a pas d'autre moyen, parce que les conteneurs STL simplement besoin de leurs éléments à défaut constructible.
std::vector<Foo>
délégués de la construction d'une autre classe, et ainsi l'amitié devient inutile. Voir iciVous pouvez utiliser
reserve()
pour augmenter la taille de la mémoire tampon et ajouter manuellement (push_back()
) les éléments nécessaires dans une boucle.resize
.Avec une spécialisation comme ceci (désolé, j'ai écrit ce avec un minimum de vérifications)?
Mais pense que si vous en avez vraiment besoin. Pourquoi ne pas créer constructeur par défaut à la place?