J'ai un problème assez courant dans le code que j'écris au moment où je veux avoir un entier qui ne peut exister qu'à l'intérieur d'une certaine plage où la plage est [start, end). Fondamentalement, je veux être en mesure de faire quelque chose comme ce qui suit:Existe-t-il une classe Cyclic Integer standard en C++?
cyclic_int ci(4, 8);
ci = 4;
assert(ci == 4);
ci += 3;
assert(ci == 7);
ci += 2;
assert(ci == 5);
assert(ci == 13);
Et cela devrait retourner vrai. Fondamentalement, la classe applique automatiquement le module (%) pour moi et l'entier agit comme un entier cyclique dans la plage avec laquelle je l'initie. Je pourrais implémenter moi-même cette classe et surcharger tous les opérateurs communs pour qu'elle fonctionne bien avec des nombres entiers normaux mais cela semble être une classe utile que quelqu'un aurait pu faire auparavant. Donc, ma question est la suivante, y at-il un cours commun comme celui-ci quelque part que tout le monde utilise ou est-ce que je pense à le faire dans le mauvais sens et y a-t-il un moyen plus simple. (Mon but est de ne pas avoir à penser constamment à appliquer l'opérateur% ou une fonction similaire par-dessus) Merci.
Edit: j'ai décidé d'écrire mon propre un aussi juste pour le plaisir: http://github.com/robertmassaioli/wrapping_number
En ce qui concerne Comme je sais, il n'y a pas de «norme de l'industrie» pour ce genre de chose - comme une bibliothèque Boost, si c'est ce que vous voulez dire. Mais comme vous l'avez dit, il devrait être assez facile de mettre en œuvre une telle classe et de surcharger tous les opérateurs nécessaires. –
Utiliser un commentaire au lieu d'une réponse car 1) Je ne l'ai jamais utilisé et 2) Ce n'est pas encore une bibliothèque Boost officielle mais: Boost.ConstrainedValue a un "wrapping_int" qui ressemble beaucoup à ce que vous recherchez: http: //Estudent.agh.edu.pl/~kawulak/constrained_value/constrained_value/tutorial.html#constrained_value.tutorial.other_error_policies_for_bounded_objects –
@Eric: C'est exactement ce que je cherchais mais il n'est pas encore à part des bibliothèques boost. J'ai essayé de regarder autour et je n'ai pas pu trouver une implémentation de référence. Je vais continuer à chercher mais savez-vous où l'on est? –