BITSET C++(11) AVEC OPÉRATIONS ARITHMETIQUES : ADDITION, SOUSTRACTION, MULTIPLIC

Signaler
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
-
 jav974 -
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54514-bitset-c-11-avec-operations-arithmetiques-addition-soustraction-multiplication-division-modulo-divers-outils

Ah le mersenne_twister !! effectivement je referai une passe. Merci pour les static, je voyais bien le côté fourre-tout dérangeant mais j'ai besoin d'accéder à du private de mabit depuis ces fonctions statiques .. Sinon chrono malheureusement nécessite une recompilation de gcc chez moi pour fonctionner, ce que j'ai fait, mais ca pourrait être gênant pour ceux qui voudraient tester rapidement la source par ici... A la limite je ferai une horloge monotonique que je mettrai avec le projet.

Le .cpp a changé en cxx mais je me suis trompé d'archive à uploader xD

Je connaissais pas ces subtilités avec le typeid, merci beaucoup !

A bientôt
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Suite à la maj du 26 juin 2013 13:39:33 :
C'est propre et bien écrit.

J'ai quelques remarques (très) mineures:
- Évite les using namespace.
- Tout code templaté, doit être mis dans un .hpp et non dans un .cpp (risque de ne pas fonctionner, souci de "linkage" possible). Utilise la technique de .cpp/.hpp/.hxx qui te permet de séparer code, code templaté et en-tête. Cf mes sources pour l'utilisation de cette technique.
- Plutôt que de créer une classe dont tous les membres sont statiques, il est préférable d'avoir des fonctions dans un namespace (remplacer "class" par "namespace" et retirer les "static" dans "mabit_stream.hpp")
- À la place de rand() et srand(), vu que tu fais du C++, tu peux avantageusement les remplacer par un "mersenne_twister" (classe de vrai random C++11). Cf: https://github.com/cptpingu/game/blob/master/src/Core/Random.cc
- Pour calculer des temps de réponse en C++11 utilise "std::chrono", plutôt que du "difftime"
- typeid.name() n'est pas fiable. Tu l'utilises pour un affichage cosmétique, ce qui n'est pas gênant (c'est fait pour :p). Mais il faut savoir que pour comparer deux typeid, on ne doit pas se baser sur name() qui change d'une implémentation à une autre, mais bien "==" qui est garantie. (La précision était un peu HS, mais importante).

Bonne continuation.
Bonjour CptPingu,

merci pour ces remarques, j'en tiens compte et posterai le tout modifié,
pour l'heure je viens de trouver un bug dans la multiplication objet-objet, je corrige ça aussi et ça ressemblera enfin à quelque chose.

En ce qui concerne le "this->" pour appeller un attribut ou méthode, disons que c'est une norme que je me suis imposé, ça me facilite la relecture.

Ce code est en fait écrit dans un .hpp, mais n'ayant pas joint de zip ça porte à confusion.. je reviens avec un projet complet et compilable :)
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Bonjour.

Au niveau du code, pas grand chose à redire, c'est propre, et tu as fait l'effort de commenter.

Quelques remarques, très mineures:
- Pas besoin de "this->" pour appeler un attribut ou une méthode.
- Évite de mettre du code dans un header. Utilise soit un .hh/.cc (ou .hpp/.cpp), ou alors inclus ton code dans un fichier de "code header" (.hxx). Cf mes sources.
- Le code est commenté, mais au format doxygen, ça aurait été un poil mieux (voir la dernière section de: http://0217021.free.fr/portfolio/axel.berardino/articles/ecrire-de-bons-commentaires)
- Pour la méthode "to_string", pour le: "là je sèche, je ne vois pas comment faire sans utiliser de calculs" ce n'est pas très dur. Tu as forcément la valeur, donc tu peux le faire passer dans un std::ostringstream et utiliser celui-ci pour créer la représentation (à coup de std::hex, std::dec, std::oct, etc...).

Sinon, ça aurait été un grand plus, que tu joignes un code complet compilable, avec des exemples commentés d'utilisation de ta classe (un main avec plein d'exemples commentés par exemple).

(J'ai écris plus de critiques qu'autre chose, mais n'en déduis pas que ce que tu as fait n'est pas bien. C'est au contraire propre sur le fond et la forme).