J'ai diverses fonctions avec deux arguments INT (j'écris les fonctions et le code d'appel moi-même). J'ai peur de confondre l'ordre de l'argument dans certains appels.
Comment puis-je utiliser le type de sécurité pour que le compilateur me préviennent ou erronée si j'appelle une fonction avec une mauvaise séquence d'arguments (tous les arguments sont int)? P>
J'ai essayé TypeDefs: Typedef ne déclenche pas d'avertissements ou d'erreurs de compilateur: P>
typedef int X; typedef int Y; void foo(X,Y); X x; Y y; foo(y,x); // compiled without warning)
3 Réponses :
Une possibilité, en fonction de ce que vous essayez d'atteindre, c'est utiliser TypeDEF code> crée des alias de type. Comme vous l'avez découvert, il n'y a pas de sécurité de type là-bas. P>
Enum code>. Ce n'est pas complètement typographe non plus, mais c'est plus proche. Par exemple, vous ne pouvez pas transmettre un INT vers un paramètre Enum sans la jeter. P>
Vous devrez créer des cours d'emballage. Disons que vous avez deux unités différentes (disons, secondes et minutes), qui sont toutes deux représentées comme des INT. Vous auriez besoin de quelque chose comme les éléments suivants pour être complètement Typeafe: et une classe similaire pendant des secondes. Le constructeur explicite vous empêche d'utiliser accidentellement un int code> sous forme
minute code>, mais l'opérateur de conversion vous permet d'utiliser un
minute code> n'importe où que vous avez besoin d'un
INT code>. p> p>
Pour une implémentation plus complète et générique, vous pouvez également consulter Boost.org/ DOC / LIBS / 1_42_0 / BOOST / STORT_TYPEDF.HPP
Obtenez une note post-it. Écrivez dessus, en gros lettres, "x premier! Alors y!" Collez-le à l'écran de votre ordinateur. Honnêtement, je ne sais pas quoi d'autre conseiller. L'utilisation de classes d'emballage est sûrement trop excessive, lorsque le problème peut être résolu avec un post-it et un marqueur magique. P>
Demandez aux développeurs de logiciels géographiques. Est-ce lat / long ou long / lat? Un cas classique où les classes d'emballage fonctionnent et post sa ne pas.
Vous trouverez peut-être quelque chose comme ça utile: Calumgrant.net/units/units.html