j'ai un ENUM, qui ressemble à ceci:Surcharger opérateur d'incrémentation, en boucle, et les cas bord
enum Suit {Clubs, Diamonds, Hearts, Spades};
Je veux surcharger l'opérateur d'incrémentation, donc je peux facilement boucler sur ces quatre mecs.
Lorsque la variable est Clubs, Diamonds ou Hearts, il n'y a aucun problème. C'est la condition de Spades qui me pose un petit problème. Mon premier instinct était de le définir de telle sorte que lorsque la variable est pique, l'incrémentation la définit comme une valeur de Clubs. Le problème est que cela semble rendre impossible de boucler les 4 valeurs dans l'énumération.
Si je fais quelque chose comme
for(Suit i=Clubs;i<Spades;++i)
{cout<<i<<endl;}
alors ma sortie ne va Hearts.
Si je ne
for(suit i=Clubs;i<=Spades;++i)
{cout<<i<<endl;}
alors ma sortie boucles juste pour toujours! Donc, je peux évidemment penser à quelques solutions de contournement pour cela ... Je ne suis pas sûr de ce que fait la chose C++ idiomatique. Dois-je redéfinir l'incrémentation de sorte que la tentative d'incrémentation d'un Spade aboutisse à un Spade? ou peut-être jette une exception?
Pour réitérer: Je peux certainement penser à quelques moyens hacky pour résoudre ce problème. Je veux juste l'aide de programmeurs expérimentés pour me dire ce qu'ils pensent être la façon la plus «normale» de résoudre le problème.
Vous venez de découvrir, vous-même, le besoin de [itérateurs] (http://www.cplusplus.com/reference/std/iterator/), en particulier le [fin] (http: //www.cplusplus .com/reference/stl/vector/end /) partie. –