Est-il possible de spécifier un vide std::vector en tant que paramètre par défaut?
J'ai lu à travers cette question similaire et je me trouve de moins que satisfaite des réponses. Je n'ai pas une simple fonction qui s'appelle "toto"; j'ai beaucoup plus de fonction complexe qui a des dangers très réels que si les paramètres ne sont pas fournis de manière judicieuse. Il me semble préférable pour la fonction à appliquer ses propres règles et s'assurer de la robustesse du système qu'à se pencher vers les subtilités sémantiques qui insistent sur le "une fonction, une seule chose à faire". Je pense que le favorisé les réponses données à cette question reflètent la programmation de l'idéalisme prises de trop loin, pas la réalité de certaines situations.
Ce que je dois faire face est:
void DoSomethingVeryComplex( const CRect bounds, CPoint startPoint = CPoint(-1,-1) );
Maintenant ce qui se passe à satisfaire la sémantique des règles, il est en train de faire quelque chose, pas plusieurs choses. La seule chose qu'il est en train de faire se trouve être complexe, et en plusieurs étapes, mais il est encore une chose.
Pour cette chose complexe, il est recommandé à l'utilisateur de fournir les limites, et de laisser la fonction de déterminer son propre point de départ. Les utilisateurs avancés peuvent vouloir faire de l'considérables de maths pour déterminer une solution de rechange point de départ et de l'offre... mais méfiez-vous des utilisateurs.
Et maintenant je viens de voir que dans de rares occasions, il est judicieux de fournir non pas un, mais plusieurs points de départ. Cela ne change rien dans la sémantique du concept du processus, parce que le processus en est un qui se propage d'un point à l'voisins, les voisins des voisins, et ainsi de suite. Donc à partir de nombreux points, est une extension naturelle.
En conséquence, je préfère préciser:
void DoSomethingVeryComplex( const CRect bounds,
const std::vector<CPoint> startPoint /* = empty" */ );
de sorte que si le vecteur est vide, la fonction détermine le point de départ comme avant, et si il y a des points dans le vecteur, elles sont utilisées comme point de départ(s).
Est-il une syntaxe C++ disponibles, ce qui me permet de faire cela - pour spécifier un tableau vide en tant que paramètre par défaut?
OriginalL'auteur omatai | 2012-05-15
Vous devez vous connecter pour publier un commentaire.
En C++11, c'est plus simple:
Avant que cela va fonctionner:
Ces deux invoquer le constructeur par défaut, ce qui crée un vecteur vide. Notez que la même syntaxe peut être utilisée pour appeler les autres constructeurs aussi bien, aussi longtemps que vous remplissez les arguments appropriés.
En C++11, vous pouvez même remplir un défaut vecteur:
Si vous voulez ce genre de capacité pour vos propres classes, voici un lien sur comment ça marche.
Merci! Je savais qu'il y avait une certaine façon de le faire. Je ne suis pas sûr que je veux le faire - peut-être plus clair de ne pas avoir de paramètre par défaut... mais il y a des liasses de code hérité de changer si je éliminer l'ancien paramètre par défaut.
en effet, c'est à peine nice en passant par l'ancien code de l'amener à la norme.
OriginalL'auteur chris